이글은 "전문가를 위한 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;
}
결과
'Program Language > c++' 카테고리의 다른 글
C++ 기초(이니셜라이저 리스트) (0) | 2023.01.10 |
---|---|
c++ 기초(반복문(while, do/while, for, 범위 기반 for)) (0) | 2023.01.09 |
c++ 기초(c++ 스타일 배열) (0) | 2023.01.06 |
c++ 기초(C 스타일 배열) (0) | 2023.01.05 |
C++ 기초(함수) (0) | 2023.01.05 |
댓글