C++中>>运算符的返回值是否为其左侧操作数?
结论
这个说法是完全正确的。
原理说明
C++标准库的流运算符(包括输入用的>>提取运算符、输出用的<<插入运算符)在设计时就明确要求:运算符重载函数会返回左侧操作数(也就是流对象本身)的左值引用。
这个设计的核心目的就是支持链式调用:
- 你给出的示例中
cin >> a >> b >> c会被拆解为((cin >> a) >> b) >> c:第一步cin >> a执行完成后返回cin本身,返回的cin继续作为下一个>>运算符的左操作数和b运算,以此类推,最终实现连续向多个变量赋值的效果。 - 同理示例里的输出语句
cout << a << endl << b运行逻辑也是一致的,每次<<运算后都返回cout本身,支持连续输出。
额外补充:因为>>返回的是流对象本身,你也可以直接把输入语句放在条件判断中,比如:
int num; while (cin >> num) { // 只要输入流处于有效状态,就会持续读取整数 }
这种写法的本质就是利用返回的流对象的隐式布尔转换特性,判断当前流是否正常、有没有遇到EOF或者输入错误。
内容的提问来源于stack exchange,提问作者CD S
相关产品推荐
相关产品推荐

