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