본문 바로가기

알고리즘/C++

[C++] 구조적 바인딩과 tie의 주의점

c++에는 tuple을 만들어 주는 tie가 존재합니다. tie는 값들의 tuple을 생성하여 참조를 반환합니다.

 

구조적 바인딩에서 auto는 컴파일러가 오른쪽 표현식의 타입에 따라 왼쪽 변수들의 타입을 추론합니다.

 

따라서 auto [a, b, c] = tie(x, y, z) 같은 형식으로 값을 대입하면 a, b, c는 auto에 의해 참조자 형태가 됩니다.

 

#include <bits/stdc++.h>

using namespace std;

int main()
{
  int x = 1, y = 2, z = 3;
  auto [a, b, c] = tie(x, y, z);
  x = 5;
  cout << a << ' ' << b << ' ' << c << '\n';
}

 

출력 : 5 2 3

 

따라서 tuple을 생성해 값을 반환하는 make_tuple을 이용하면 값을 할당받게 됩니다.

 

#include <bits/stdc++.h>

using namespace std;

int main()
{
  int x = 1, y = 2, z = 3;
  auto [a, b, c] = make_tuple(x, y, z);
  x = 5;
  cout << a << ' ' << b << ' ' << c << '\n';
}

 

출력 : 1 2 3

'알고리즘 > C++' 카테고리의 다른 글