『Cプログラミングの落とし穴』(A.コーニグ, 1990)
[M1 Mac, Big Sur 11.6.8, clang 13.0.0, NO IDE]
代入式にインクリメントを含めると予想外な挙動が見られます。インクリメントは代入式の後に単独で書くべきだとしています。
確かにそのようなコードを書いてみると、法則性がよくわからない結果になりました。
#include <cppstd.h>
int main() {
int x[5] = {1,2,3,4,5};
int y[3];
int i = 0;
while (i < 3){
cout << "x[" << i << "] = " << x[i] << endl;
y[i] = x[i];
i++;
}
cout << "y[0] = " << y[0] << endl;
cout << "y[1] = " << y[1] << endl;
cout << "y[2] = " << y[2] << endl;
return 0;
}
--------------------------------------------------
出力
--------------------------------------------------
x[0] = 1
x[1] = 2
x[2] = 3
y[0] = 1
y[1] = 2
y[2] = 3
#include <cppstd.h>
int main() {
int x[5] = {1,2,3,4,5};
int y[3];
int i = 1;
while (i < 4){
cout << "x[" << i << "] = " << x[i] << endl;
y[i] = x[i++];
}
cout << "y[0] = " << y[0] << endl;
cout << "y[1] = " << y[1] << endl;
cout << "y[2] = " << y[2] << endl;
return 0;
}
--------------------------------------------------
出力
--------------------------------------------------
x[1] = 2
x[2] = 3
x[3] = 4
y[0] = 0
y[1] = 0
y[2] = 2