이이프
IeF 제멋대로 세상
이이프
전체 방문자
오늘
어제

공지사항

  • ✔ Info
  • 전체 글보기 (56)
    • 💻프로그래밍 내용 정리 (55)
      • C (0)
      • C++17 (55)
    • 💻게임메이커 (0)
    • 💻언리얼엔진 (0)
    • 💻유니티 (0)
    • 🎈[팀&자작]게임소개 (0)
    • 📃게임제작기술 (0)
    • 🎨그림놀이 (0)
    • 📒대학생활 (0)
    • 😃잡담 (1)
    • 🕹게임성과 (0)
    • 💷자격증 (0)

블로그 메뉴

  • 방명록

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
이이프

IeF 제멋대로 세상

💻프로그래밍 내용 정리/C++17

[C++ 1.1.13] 구조적 바인딩(auto)

2022. 8. 15. 21:59
728x90

구조적 바인딩

C++17부터 구조적 바인딩이란 개념이 도입됐다.

구조적 바인딩을 이용하면 여러 개의 변수를 선언할 때 배열, 구조체, 페어 또는 튜플의 값으로 초기화할 수 있다.

페어는 원소가 두 개인 순서쌍이고, 튜플은 원소가 n개인 순서쌍이다.

 

예를 들어 다음과 같이 배열이 정의되어 있다고 하자

std::array<int, 3> values = { 11, 22, 33 };

이 상태에서 x, y, z란 변수를 선언할 때 각각 앞에 나온 values 배열에 담긴 값으로 초기화할 수 있다.

구조적 바인딩을 적용하려면 auto 키워드를 붙여야 한다.

예로 auto 자리에 int를 지정하면 안된다.

auto [x, y, z] = values;

구조적 바인딩에서는 왼쪽에 나온 선언할 변수 개수와 오른쪽에 나온 표현식 값 개수가 반드시 일치해야 한다.

#include <iostream>
#include <array>

int main()
{
    std::array<int, 3> values = { 11, 22, 33 };
    auto [x, y, z] = values;
    std::cout << x << " " << y << " " << z << std::endl;
    return 0;
}

 

구조적 바인딩은 배열뿐만 아니라 모든 멤버가 non-static이면서 public으로 선언된 데이터 구조라면

어떤 것(struct, pair, tuple 등)도 적용할 수 있다.

struct Point { double mX, mY, mZ; };
Point point;
point.mX = 1.0; point.mY = 2.0; point.mZ = 3.0;
auto [x, y, z] = point;
#include <iostream>

struct Point { double mX, mY, mZ; };

int main()
{
    Point point;
    point.mX = 1.0; point.mY = 2.0; point.mZ = 3.0;
    auto [x, y, z] = point;
    std::cout << x << " " << y << " " << z << std::endl;
    return 0;
}

'💻프로그래밍 내용 정리 > C++17' 카테고리의 다른 글

[C++ 1.2.1] C++의 스트링  (0) 2022.08.16
[C++ 1.1.14] 반복문(while 문, do/while, for, 범위 기반 for 문)  (0) 2022.08.15
[C++ 1.1.12] std::vector, push_back()  (0) 2022.08.15
[C++ 1.1.11] std::array  (0) 2022.08.15
[C++ 1.1.10] C 스타일 배열, 영 초기화, 이니셜라이저 리스트, std::size(), sizeof  (0) 2022.08.15
    '💻프로그래밍 내용 정리/C++17' 카테고리의 다른 글
    • [C++ 1.2.1] C++의 스트링
    • [C++ 1.1.14] 반복문(while 문, do/while, for, 범위 기반 for 문)
    • [C++ 1.1.12] std::vector, push_back()
    • [C++ 1.1.11] std::array
    이이프
    이이프
    게임 프로그래머 지망생 / Since 2022.08.14

    티스토리툴바