unsignedとsignedの引き算の結果をforの条件に使ってしまい無限ループ
c++がよくわからない挙動をしているt6o_o6t.icon
code:main.cpp
for (int i = 0; i < -2; i++) {
// ...
}
これでは事象が再現しなかったので翌日に持ち越し
code:NG_1.cpp
using namespace std;
int main(void) {
vector<int> l;
for (int i = 0; i < l.size() - 5; i++) {
cout << "Hello World!" << endl; // この文は無限に実行される
}
return 0;
}
code:OK_1.cpp
using namespace std;
int main(void) {
vector<int> l;
int p = l.size() - 5;
for (int i = 0; i < p; i++) {
cout << "Hello World!" << endl;
}
return 0;
}
l.size()がunsingedなのに普通に使って大丈夫かな?
大丈夫ではない
解決した
code:OK_2.cpp
for (int i = 0; i < (int)(l.size() - 5); i++) {
cout << "Hello World!" << endl;
}
l.size()はどう使うのが良いのだろうか?
この解説では、l.size()に相当するv.size()を、intとして扱っている