最近在一次采访中有一个客观类型的问题。
int a = 0;
cout << a++ << a;
答案:
答10
B 01
未定义行为
我回答选项 b,即输出为“01”。
但令我惊讶的是,后来一位面试官告诉我,正确答案是选项 c: 未定义。
现在,我知道了 C + + 中序列点的概念:
int i = 0;
i += i++ + i++;
但是根据我对 cout << a++ << a
语句的理解,ostream.operator<<()
将被调用两次,第一次是 ostream.operator<<(a++)
,后来是 ostream.operator<<(a)
。
我还检查了 VS2010编译器的结果,它的输出也是“01”。