最近在一次采访中,出现了以下客观类型问题。
int a = 0;
cout << a++ << a;
答案:
一个。10
羽 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
有之前递增)。即使它不是未定义的,也仍然会令人困惑。