可能重复:
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;
}
Run Code Online (Sandbox Code Playgroud)
正如我在评论中所说,没有顺序点......
\n\n根据 Stroustrup 的《C++ 编程语言》第三版的\xc2\xa76.2.2 ...
\n\n\n\n\n表达式内子表达式的求值顺序未定义。特别是,您不能假设表达式是从左到右计算的。
\n
C++03 标准的 §5.4 规定:
\n\n\n\n\n除非另有说明,否则未指定各个运算符的操作数和各个表达式的子表达式的求值顺序以及副作用发生的顺序。在上一个和下一个序列点之间,标量对象的存储值最多应通过表达式的求值修改一次。
\n
您可以在此处了解有关序列点和未定义行为的更多信息。
\n| 归档时间: |
|
| 查看次数: |
214 次 |
| 最近记录: |