第321章 範囲 for ループ

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