for each

すげー怪っしい.


#include <vector>

int main()
{
std::vector<int> v;
for (int i = 0; i < 10; i++) v.push_back(i);
int sum = 0;
for each (int x in v) sum += x;
printf("sum=%d\n", sum);
}

http://homepage1.nifty.com/herumi/diary/0708.html

なんだこれ、と思ったらVC8には for each なんて構文があるらしい。

C#のforeachと同じようなもののようだ。C++/CLIの機能ではなく、C++に対する拡張のようでマネージドコードでなくても動作するらしい。もちろんマネージドコードでも動作する(IEnumerableインターフェイスなんかが実装されていれば回せるらしい)。

全然知らなかった、というかVC8は使ってないしなぁ。VC8の開発ももう少ししたらやるようになるだろうけど、foreachやりたければBOOST_FOREACH使う方がいいだろう。独自拡張はあまり使う気にはなれない。とは言え面白そうだし移植性なんて考える必要ないので使ってみてもいいのかもしれない。でも組み込み配列には使えない(VC9から対応)らしいので、やっぱりBOOST_FOREACHの方が使い勝手は良さそうだなぁ。