본문 바로가기
Program Language/c++

C++ 기초(구조적 바인딩)

by 토담이아빠 2023. 1. 9.

구조적 바인딩

 

이글은 "전문가를 위한 c++(개정4)" 학습한 내용을 직접 실습해보며 정리한 Review 글입니다.


구조적 바인딩

 

c++17부터 구조적 바인딩(structured binding)이란 개념이 도입됐습니다. 여러개의 변수를 선언할 때 배열, 구조체, 페어 또는 튜플의 값으로 초기화할 수 있는 개념입니다. 예를 들어 x, y, z라는 변수를 배열에 담긴 값으로 초기화 하고 싶을 때 'auto [x, y, z] = 배열변수' 와 같이 선언하면 x, y, z에 배열값이 순서대로 할당됩니다. 


array<int, 3> values = { 1, 2, 3 }; // 배열을 선언한다.
auto [x, y, z] = values; // x, y, z를 각각 1, 2, 3으로 초기화

구조적 바인딩 사용 시 반드시 auto 키워드를 사용해야 합니다. x, y, z값이 정수형 값을 가진다고 해서 int라고 지정하면 안됩니다. 또한 왼쪽에 나온 선언할 변수의 개수와 오른쪽에 나온 표현식의 값 개수가 반드시 일치해야 합니다. (위 예제에서는 변수의 개수 3개 와 배열 원소의 개수 3개로 일치합니다.)

 

구조적 바인딩은 배열뿐만 아니라 모든 멤버가 non-static이면서 public으로 선언된 데이터 구조라면 어떤 것(struct, pair, tuple 등)도 적용할 수 있습니다. 다음 예제는 구조체에 대한 구조적 바인딩을 보여줍니다.


#include <iostream>
 
using namespace std;
 
struct Point
{
	double mX;
	double mY;
	double mZ;
};
 
int main()
{	
	Point point = { 1.0, 2.0, 3.0 }; // 구조체 초기화
	auto [x, y, z] = point;          // 구조적 바인딩 적용
 
	cout << "x = : " << x << endl;
	cout << "y = : " << y << endl;
	cout << "z = : " << z << endl;
 
	return 0;
}

결과

 

댓글