最近在一次面试中,有一个如下的客观类型问题。
int a = 0;
cout << a++ << a;
答案:
a. 10
b. 01
c. 未定义行为
我的回答是选项b,即输出应该是"01"。
但后来我被面试官告知正确答案是选项c:未定义行为。
现在,我知道C++中的序列点概念。以下语句的行为是未定义的:
int i = 0;
i += i++ + i++;
根据我的理解,对于语句 cout << a++ << a
,会调用两次ostream.operator<<()
,首先是ostream.operator<<(a++)
,然后是ostream.operator<<(a)
。
我在VS2010编译器上也进行了验证,输出结果也是'01'。
10
,而是可能是01
或00
。(c++
运算符会在自增之前使用变量c
的值进行运算) 即使它不是未定义的,它仍然可能非常令人困惑。 - leftaroundabout