cout<a+<a;的正确答案是什么?最近在一次采访中,有一个下面的客观类型的问题。int a = 0;cout << a++ << a;回答:a.10b.01C.未界定的行为我回答了选择b,即输出为“01”。但令我惊讶的是,后来一位面试官告诉我,正确的答案是选项c:未定。现在,我知道了C+中序列点的概念。以下语句未定义此行为:int i = 0;i += i++ + i++;但根据我对声明的理解cout << a++ << a,ostream.operator<<()会被调用两次,第一次是ostream.operator<<(a++)后来ostream.operator<<(a).我还检查了VS 2010编译器的结果,它的输出也是‘01’。
3 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
cout << a++ << a;
std::operator<<(std::operator<<(std::cout, a++), a);
a
std::operator<<(std::cout, a++)
C+17更新
在移位运算符表达式中 E1<<E2
和 E1>>E2
的每一个值计算和副作用 E1
的值计算和副作用之前对 E2
.
b
01
.
12345678_0001
TA贡献1802条经验 获得超5个赞
std::cout.operator<<( a++ ).operator<<( a );
a++
std::ostream::operator<<
a
std::ostream::operator<<
a++
a
a++
operator<<
a
operator<<
operator<<
除注意到的情况外,未具体说明单个运算符操作数的计算顺序和个别表达式的子表达式,以及产生副作用的顺序。在前一个序列点和下一个序列点之间,标量对象最多应该通过表达式的计算修改其存储值一次。此外,只能访问先前的值来确定要存储的值。对于一个完整表达式的子表达式的每一个允许的顺序,都应满足本款的要求;否则,该行为是不明确的。
a++
, a
operator<<
operator<<
a
(a++
a
- 3 回答
- 0 关注
- 829 浏览
添加回答
举报
0/150
提交
取消