c++ 구조적 바인딩 (structured bindings)
- structured bindings는 C++17부터 도입된 기능
- 구조적 바인딩은 여러 변수에 sub object 또는 initializer의 elements를 할당할 수 있게 해주는 기능이다.
- 이를 사용하면 여러 변수를 선언할 때 배열, 구조체, 페어, 튜플의 값으로 초기화할 수 있다.
사용방법
- auto 키워드와 대괄호 사이에 변수명을 적고 오른쪽에 값을 넣어주면 된다.
int arr[3] = {1, 2, 3};
auto [a0, a1, a2] = arr; //<-- 이 경우 a0, a1, a2는 복사된 값
- 유의할 점
- 반드시 auto 키워드를 사용해야 한다는 것
- 왼쪽에 선언한 변수의 개수와 오른쪽에 표현식의 값 개수가 일치해야 한다는 것
- 구조적 바인딩은 배열 뿐 아니라 모든 멤버가 non-static이면서 public으로 선언된 데이터 구조라면 어떤 것도 적용할 수 있다.
구조적 바인딩을 사용한 코드
struct A {
int a;
std::string b;
float c;
};
A makeStructure()
{
return A(5, "abc", 5.4f);
}
int main()
{
int arr[3] = {1, 2, 3};
auto [a0, a1, a2] = arr; //<--- 복사된 값
auto& [ar0, ar1, ar2] = arr; //<--- 참조된 값
auto [s0, s1, s2] = makeStructure();
std::map<std::string, int> m{
{ "element1", 1 },
{ "element2", 2 },
{ "element3", 3 },
};
for (auto& [k, v] : m) {
std::cout << k << ", " << v << std::endl;
}
return 0;
}
output
element1, 1
element2, 2
element3, 3
출처
https://velog.io/@go4521304/%EA%B5%AC%EC%A1%B0%EC%A0%81-%EB%B0%94%EC%9D%B8%EB%94%A9
https://sh-cho.github.io/cpp-structured-binding/
'C++' 카테고리의 다른 글
[C++] 이름 공간 (0) | 2024.12.16 |
---|---|
[C++] Override와 final 키워드 (0) | 2024.12.13 |
[C++] 람다 함수 (1) | 2024.12.13 |
<C++> enum class (0) | 2024.04.04 |
<C++> nullptr (0) | 2024.04.03 |