Aşağıdaki kod uyarınca std::tie()
kullanarak iki değişkeni takas etmeye çalışıyordum (std::swap
'un farkındayım, bunu meraktan kurtarmaya çalışıyordum)):{} ve std :: make_pair() işlevini kullanarak iki değişkeni takas etmeye çalışırken farklı bir davranış
#include <iostream>
#include <tuple>
using std::cin; using std::tie;
using std::cout; using std::endl;
using std::make_pair;
int main() {
int a = 2, b = 10;
cout << "Before Swapping using {}" << endl;
cout << "a: " << a << " b: " << b < <endl;
tie(a, b) = {b, a};
cout << "After Swapping using {}" << endl;
cout << "a: " << a << " b: " << b << endl;
a = 2, b = 10;
cout << "Before Swapping using make_pair()" << endl;
cout << "a: " << a << " b: " << b << endl;
tie(a, b) = make_pair(b, a);
cout << "After Swapping using make_pair()" << endl;
cout << "a: " << a << " b: " << b << endl;
return 0;
}
ben g++ test.cpp -std=c++11 -o test
kullanarak derlenmiş.
Ama çıkış şuydu:
Before Swapping using {}
a: 2 b: 10
After Swapping using {}
a: 10 b: 10
Before Swapping using make_pair()
a: 2 b: 10
After Swapping using make_pair()
a: 10 b: 2
Yani, bunun yerine std::make_pair(a, b)
her şey yazma {a, b}
yazabilir beri benim soru, (C++ 11 sonrası), neden bu iki sürümü veriyoruz farklı çıkış?
Benim tahminim aşağıdaki satırı
std::tie(a, b) = {b, a};
bir çift yapma ve nedense sadece a
değerini mutasyona olmadığını oldu. Ama emin değilim.
tanımsız davranışa benziyor ... 'a'' b' değerine ayarlı ve daha sonra güncellenen 'a'' b' yazılıyor ... Bir sıra noktası sorunu. –
@ Jarod42 aşağıdaki cevabı verir. {} Ile bir çift oluşturabilirsin, fakat derleyicinin o noktada ne yaptığınızı bilmesi gerektiğini bilmeniz doğru. –