C ++

可能重复:
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;
}

正如我在我的评论中所说的,没有序列点......

根据Stroustrup的The C ++ Programming Language,第三版的§6.2.2...

表达式中子表达式的评估顺序是不确定的。 特别是,您不能假设表达式是从左到右进行评估的。

C ++ 03标准的§5.4规定:

除非另有说明,否则对个体运算符的操作数和个别表达式的子表达式的评估顺序以及副作用发生的顺序未作规定。 在前一个和下一个序列点之间,一个标量对象应该通过评估一个表达式来最多修改其存储值一次。

你可以在这里了解更多关于序列点和未定义的行为。

链接地址: http://www.djcxy.com/p/62823.html

上一篇: c++

下一篇: Downsides of a Custom HTML Shiv