Xに、問題として上がっていたこんなコード(実際の問題とは違うが、要は i < v.size() – 1 の評価のところで。
#include <iostream>
#include <vector>
int main(void)
{
std::vector<int> v;
int count = 0;
for (int i = 0; i < v.size() - 1; i++) {
count++;
std::cout << count << "\t" << i << "\t" << (v.size() - 1) << std::endl;
if (count > 5) break;
}
return 0;
}
この結果は
1 0 18446744073709551615
2 1 18446744073709551615
3 2 18446744073709551615
4 3 18446744073709551615
5 4 18446744073709551615
6 5 18446744073709551615
となるわけで、iがint、v.size() – 1 はunsigned long なのだから、0から-1を引いても大きな値になっちゃうわけで、評価式は偽になりえないっちうわけで。
問題としては、この結果がどうなるか(無限ループ、SEGV、何も起きない、みたいな選択)ってことだけれど、まぁストッパがなければ無限ループになるわけで。
結論としては、イテレータ回せ、ってことで。





adidas ゴレットVIII