構造化束縛の機能の一つとして範囲 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