最近在一次采访中有一个以下客观类型的问题.
int a = 0;
cout << a++ << a;
Run Code Online (Sandbox Code Playgroud)
回答:
一个.10
b.01
c.未定义的行为
我回答了选择b,即输出为"01".
但令我惊讶的是,一位采访者告诉我,正确的答案是选项c:undefined.
现在,我确实知道C++中序列点的概念.以下语句的行为未定义:
int i = 0;
i += i++ + i++;
Run Code Online (Sandbox Code Playgroud)
但根据我对该陈述的理解cout << a++ << a,ostream.operator<<()将被召唤两次,先是ostream.operator<<(a++)后来ostream.operator<<(a).
我还检查了VS2010编译器的结果,其输出也是'01'.