본문 바로가기
IT/C++(CPP)

CPP 초급 강좌 100. C++ structured binding

by 신림83 2022. 2. 11.
반응형

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 }; 코드는 일관된쵝화 코디은데 눈에 익지 않으시는 분은 아래 링크 한번 보시고 오시면 좋을거 같습니다.

관련링크

 

 

CPP 초급 강좌 7. C++ 일관된 초기화(uniform initialization)

CPP 초급 강좌 7. C++ 일관된 초기화(uniform initialization) c++11 에서 도입된 uniform initalization 일관된 초기화란 무엇이고 왜 필요한 것일까요? 일관된 초기화 int n1 = 10; //1번 int n2 = { 10 }; //2..

sillim83.tistory.com

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] 이런코드가 되지 않을까란 시도는 아무 의미없습니다.

 

저도 평소 접하지 못하던 코드라 생소한데요, 대신 알아둬야 다음에 코드를 봤을때 당황하지 않겠죠.

공부해 둡시다.

반응형

댓글