隔壁家二狗子贡献了一道来自欢聚时代(YY)的C++笔试题。
问题
以下程序的输出是什么?
#include <iostream>
int main()
{
int a = 10;
int b = 20;
int x;
// (1)
x = (a, b);
std::cout << x << std::endl;
// (2)
x = a, b;
std::cout << x << std::endl;
}
答案
10
20
解析
这个程序虽然简单,但内里却大有文章。
要理解这个问题,首先要看看C++中的“逗号运算符”。
相信在很多人记忆中,“逗号运算符”非常陌生,它的操作是:
(1)首先,计算逗号左侧的表达式
(2)然后,计算逗号右侧的表达式
(3)最后,返回右侧表达式的结果
所以对于
x = (a, b);
执行后,x的值就是b的值,为20
但是对于
x = a, b
情况则有所不同,执行后x的值并不是b的值。
这是因为C++规定逗号的优先级比赋值运算符operator = 低,所以x = a, b的处理过程是:
(1)首先,执行表达式 x = a
(2)然后,执行表达式b(什么都不用做)
因此,x的值等于a的值,为10.
思考题:逗号运算符可以重载吗?
查看更多面经笔经,可关注微信公众号CPP编程