전문가를 위한 C++

 

C++ 17에서 추가된 기능으로 구조적 바인딩이란 개념이 추가됐다고 한다.

이것을 이용하면 여러개의 변수를 선언 할 때 배열, 구조체, 페어 혹은 튜플의 값으로 초기화 할 수 있다고 한다.

적용 방법은 auto 키워드와 [ ] 대괄호 사이에 변수명을 적고 오른쪽에 값을 넣어주면 된다.

array<int, 3> value = {1, 2, 3};
auto [x, y, z] = value;

다만 유의할 점은 무조건 auto 키워드를 사용해야 한다는 것과 왼쪽에 선언한 변수의 개수와 오른쪽에 표현식의 값 개수가 일치해야 한다는 것이다.

구조적 바인딩은 배열 뿐 아니라 모든 멤버가 non-static 이면서 public으로 선언된 데이터 구조라면 어떤 것도 적용 할 수 있다고 한다. (예를 들면 struct, pair, tuple)

 

struct에 구조적 바인딩을 사용한 예시

struct Point {
	double a, b;
	int c;
};

int main() {
	Point p = {1, 2, 3};
	auto [x, y, z] = p;
}

 

pair과 tuple은 내가 더 공부해보고 추후 더 자세히 적어보는 것으로 하겠다.

'개발 > C++' 카테고리의 다른 글

if 문의 이니셜라이저  (0) 2022.08.20

전문가를 위한 C++

 

C++ 17에서 추가된 기능으로 if 문 안에서  이니셜라이저 (초기자)를 넣는 기능이 추가됐다고 한다.

간단하게 설명하면 if 문안에서 변수를 정의하고 그것을 바로 조건문에서 사용할 수 있는 것인데 이곳저곳에 쓸 일이 많을 거 같아 적었다.

if ( <이니셜라이저>; <조건문>) { <본문> }

문법은 위와 같고 이니셜라이저에서 정의한 변수는 <조건문>과 <본문> 안에서만 사용할 수 있다.

 

+ switch 문에서도 이니셜라이저를 지원한다. 문법은 아래와 같고 if 문에서와 마찬가지로 <조건문>과 <본문> 안에서만 사용할 수 있다.

switch (<이니셜라이저>; <표현식>) { <본문> }

 


예시)

int main()
{
	int i = 10;

	// if 문 이니셜라이저
	if (int test = i; test > 0)
		cout << "Wha!";
    
	// switch 문 이니셜라이저
	switch (int test = i + 20; test)
	{
	case 10:
		cout << "i 인가?";
		break;

	case 30:
		cout << "test 인가?";
		break;

	default:
		break;
	}
}

 

'개발 > C++' 카테고리의 다른 글

구조적 바인딩  (0) 2022.08.20

+ Recent posts