このコードが 2 1 0 を出力するのはなぜですか?
#include <iostream>
struct A{
int p;
A():p(0){}
int get(){
return p++;
}
};
int main(){
A a;
std::cout<<a.get()<<" "<<a.get()<<" "<<a.get()<<std::endl;
}
このコードが 2 1 0 を出力するのはなぜですか?
#include <iostream>
struct A{
int p;
A():p(0){}
int get(){
return p++;
}
};
int main(){
A a;
std::cout<<a.get()<<" "<<a.get()<<" "<<a.get()<<std::endl;
}
コメントで述べたように、シーケンスポイントはありません...
Stroustrup のThe C++ Programming Language, Third Editionの §6.2.2 によると...
式内の部分式の評価順序は定義されていません。特に、式が左から右に評価されると想定することはできません。
C++03 標準の §5.4 では、次のように指定されています。
特に明記されていない限り、個々の演算子のオペランドと個々の式の部分式の評価の順序、および副作用が発生する順序は規定されていません。前のシーケンス ポイントと次のシーケンス ポイントの間で、スカラー オブジェクトの格納値は、式の評価によって最大 1 回変更されます。
シーケンス ポイントと未定義の動作の詳細については、こちらをご覧ください。