기본 패턴
cpp
std::pair<std::string, int> entry{"apple", 3};
auto [name, count] = entry;설명
- structured bindings는 여러 값을 묶어 둔 객체에서 각 구성 요소를 한 번에 이름 붙여 꺼내는 문법입니다.
pair.first,pair.second보다 의미 있는 변수 이름을 줄 수 있어 코드 가독성이 크게 좋아집니다.std::pair,std::tuple, 배열, 구조체 일부,map반복 결과처럼 분해 가능한 대상과 잘 어울립니다.- 선언이
auto [a, b]인지auto& [a, b]인지에 따라 복사인지 참조인지 달라지므로, 값 의미를 함께 생각해야 합니다. - 특히 연관 컨테이너 순회에서
for (const auto& [key, value] : table)패턴은 현대 C++에서 가장 자주 보이는 문법 중 하나입니다.
짧은 예제
cpp
#include <iostream>
#include <map>
#include <string>
int main() {
std::map<std::string, int> scores{{"Kim", 90}, {"Lee", 85}};
for (const auto& [name, score] : scores) {
std::cout << name << ": " << score << "\n";
}
}빠른 정리
| 항목 | 설명 |
|---|---|
auto [a, b] = x; | 값을 분해해 새 변수 이름을 붙임 |
auto& [a, b] = x; | 원본에 대한 참조를 유지 |
std::pair | 두 값을 묶는 가장 단순한 표준 타입 |
| map 순회 | key/value 분해에 특히 잘 어울림 |
| 장점 | .first, .second보다 의미가 잘 드러남 |
주의할 점
structured bindings는 읽기 좋지만, auto인지 auto&인지에 따라 복사와 참조가 달라집니다. 수정이 원본에 반영되어야 하는 경우 이 차이가 특히 중요합니다.