C++

[C++] 구조적 바인딩

hanseongbugi 2024. 12. 13. 15:24

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

 

구조적 바인딩

C++ 17에서 새로 추가된 구조적 바인딩에 대해 알아보자.

velog.io

https://sh-cho.github.io/cpp-structured-binding/

 

C++ 구조적 바인딩(structured bindings)

structured bindings란 Structured bindings는 C++17에 도입된 기능이다. 이걸 한글로 바꾸면 ‘구조적 바인딩’ 정도가 될 것 같다. 비슷한 말로는 destructuring, unpack, decomposition 등이 있을 것 같다. 나는 언팩

sh-cho.github.io