7

重複の可能性:
cout << 出力する関数の呼び出し順序?
未定義の動作とシーケンス ポイント

このコードが 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;
}
4

1 に答える 1

4

コメントで述べたように、シーケンスポイントはありません...

Stroustrup のThe C++ Programming Language, Third Editionの §6.2.2 によると...

式内の部分式の評価順序は定義されていません。特に、式が左から右に評価されると想定することはできません。

C++03 標準の §5.4 では、次のように指定されています。

特に明記されていない限り、個々の演算子のオペランドと個々の式の部分式の評価の順序、および副作用が発生する順序は規定されていません。前のシーケンス ポイントと次のシーケンス ポイントの間で、スカラー オブジェクトの格納値は、式の評価によって最大 1 回変更されます。

シーケンス ポイントと未定義の動作の詳細については、こちらをご覧ください。

于 2012-08-23T06:43:34.727 に答える