CPP 초급 강좌 100. C++ structured binding
structured binding 에 대해서 적어볼게요
해당 기능은 cpp 17, c++17 부터 지원되는 내용입니다. 여러분의 프로젝트가 오래된 컴파일러를 사용하지고 있으시면 해당 코드는 동작을 안 하실수 있어요, 아니면 컴파일 옵션에 17을 기능을 사용가능하도록 옵션을 넣어주셔야 할 듯합니다.
structured binding 기능은 구조체가 배열에서 각 멤버의 값을 껀낼 때 사용하실수 있습니다.
하나의 구조체에서 각 성분을 출력하고자 하셨을때 아래와 같은 코드를 많이 쓰셨을꺼에요.
#include <iostream>
using namespace std;
struct Point
{
int x{ 10 };
int y{ 10 };
};
int main()
{
Point pt;
int x = pt.x;
int y = pt.y;
cout << x << ',' << y << endl;
}
x,y를 선언하고 pt 맴버에 . 으로 접근하여 값을 복사합니다. 이와 같은 코드를 structured binding을 이용하여 표현할 수 있습니다.
추가로 int x{ 10 }; int y{ 10 }; 코드는 일관된쵝화 코디은데 눈에 익지 않으시는 분은 아래 링크 한번 보시고 오시면 좋을거 같습니다.
관련링크
structured binding 코드로 변경
int main()
{
Point pt;
//int x = pt.x;
//int y = pt.y;
auto[x, y] = pt;
cout << x << ',' << y << endl;
}
auto[x, y] = pt; 동일한 동작을 보장합니다.
배열 또한 적용해볼수 있습니다.
int main()
{
int arr[7] = { 1,2,3,4,5,6,7 };
auto[n1, n2, n3, n4, n6, n7] = arr;
}
구조체 분해의 x,y 나 배열의 n1 ~ 들은 이미 모두 변수로 선언된 상태라 보시면 됩니다. 해당 변수들을 다시 선언하거나 하는 행위는 모두 error입니다.
structured binding은 꼭 auto를 사용하여 구현해야 합니다. int 변수를 받을 예정이라고 int[x, y] 이런코드가 되지 않을까란 시도는 아무 의미없습니다.
저도 평소 접하지 못하던 코드라 생소한데요, 대신 알아둬야 다음에 코드를 봤을때 당황하지 않겠죠.
공부해 둡시다.
'IT > C++(CPP)' 카테고리의 다른 글
VS2019 헤더 소스 전환 단축키 + 유용한 단축키 모음, Visual Assit 없이 하는 방법 (0) | 2021.08.21 |
---|---|
CPP 초급 강좌 30. explicit 생성자 (7) | 2020.11.12 |
CPP 초급 강좌 29. 맴버 초기화 리스트 member initializer lists (0) | 2020.11.10 |
CPP 초급 강좌 28. 생성자 constructor (1) | 2020.11.09 |
CPP 초급 강좌 27. 접근지정자, 캡슐화, friend 함수 (4) | 2020.11.06 |
댓글