std::tie()
을 사용하여 두 변수를 바꿔 쓰려고했습니다 (나는 std::swap
을 알고 있습니다. 호기심에서 벗어났습니다.) :{} 및 std :: make_pair()를 사용하여 두 변수를 바꿀 때 다른 동작이 발생했습니다.
#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;
}
g++ test.cpp -std=c++11 -o test
을 사용하여 컴파일했습니다.
그러나 출력이이었다
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
그래서, 우리가 대신 std::make_pair(a, b)
매번 작성하는 {a, b}
을 쓸 수 있기 때문에 내 질문은, (C++ 11 년 이후), 왜이 두 가지 버전이 제공하는 다른 출력?
내 생각 엔 다음 줄
std::tie(a, b) = {b, a};
이 한 쌍을 만들고 어떤 이유로 만 a
의 가치를 돌연변이되지 않는 것이 었습니다. 그러나 나는 확실하지 않다.
은 정의되지 않은 동작처럼 보입니다 ...'a'는'b'의 값으로 설정되고 업데이트 된'a'는'b'에 쓰여집니다 ... 시퀀스 포인트 문제입니다. –
@ Jarod42는 아래 답변을 제공합니다. 당신은 {}로 쌍을 만들 수 있지만, 컴파일러는 그 시점에서 당신이 구성하고있는 것을 알아야합니다. –