構造化束縛の機能の一つとして範囲 for ループへの適用があります。
まあ、考え方としては範囲 for ループ内で構造体を展開する機能って感じですかね。
ではソースコードを見てみましょう。
マクロについては クロスコンパイルのための組み込みマクロ を参照くださいね。
main.cpp.
1 #if __cplusplus < 201703L 2 # pragma message "std=c++17を指定してください" 3 #endif 4 5 #include <iostream> 6 7 struct Foo 8 { 9 int x,y,z; 10 }; 11 12 int main() 13 { 14 Foo f[2]{{1,2,3},{4,5,6}}; 15 16 for(const auto &[x,y,z] : f ){ 17 std::cout << x << y << z << '\n'; 18 } 19 20 return 0; 21 }
ビルドと出力.
$ g++ main.cpp -std=c++17 $ ./a.out 123 456
このソースコードでは Foo というクラスの配列を使っています。
7 struct Foo 8 { 9 int x,y,z; 10 }; 14 Foo f[2]{{1,2,3},{4,5,6}};
インスタンス f は配列なので範囲 for ループに適用できます。
16 for(const auto &[x,y,z] : f ){ 17 std::cout << x << y << z << '\n'; 18 }
この構文は若干わかりにくいですが [] の中で展開したい変数が宣言・定義されてます。
Copyright 2017-2018, by Masaki Komatsu