Different behaviour of comma operator in C++ with return?(C ++中逗号运算符的不同行为与返回?)
问题描述
这个(注意逗号操作符):
#include <iostream>
int main() {
int x;
x = 2, 3;
std::cout << x << "
";
return 0;
}
输出 2.
但是,如果您将 return
与逗号运算符一起使用,则:
However, if you use return
with the comma operator, this:
#include <iostream>
int f() { return 2, 3; }
int main() {
int x;
x = f();
std::cout << x << "
";
return 0;
}
输出 3.
为什么逗号运算符与 return
的行为不同?
Why is the comma operator behaving differently with return
?
推荐答案
根据算子优先级,逗号运算符的优先级低于operator=
,所以 x = 2,3;
等价于 (x = 2),3;
.(运算符优先级决定了运算符如何绑定到它的参数,根据它们的优先级比其他运算符更紧或更松.)
According to the Operator Precedence, comma operator has lower precedence than operator=
, so x = 2,3;
is equivalent to (x = 2),3;
. (Operator precedence determines how operator will be bound to its arguments, tighter or looser than other operators according to their precedences.)
注意这里的逗号表达式是(x = 2),3
,而不是2,3
.x = 2
首先被评估(并且它的副作用已经完成),然后结果被丢弃,然后 3
被评估(它实际上什么都不做).这就是 x
的值是 2
的原因.注意3
是整个逗号表达式的结果(即x = 2,3
),它不会被用来赋值给x
.(改成x = (2,3);
,x
会被赋值为3
.)
Note the comma expression is (x = 2),3
here, not 2,3
. x = 2
is evaluated at first (and its side effects are completed), then the result is discarded, then 3
is evaluated (it does nothing in fact). That's why the value of x
is 2
. Note that 3
is the result of the whole comma expression (i.e. x = 2,3
), it won't be used to assign to x
. (Change it to x = (2,3);
, x
will be assigned with 3
.)
对于return 2,3;
,逗号表达式为2,3
,2
被求值然后其结果被丢弃,然后3
被评估并作为整个逗号表达式的结果返回,由 返回声明稍后.
For return 2,3;
, the comma expression is 2,3
, 2
is evaluated then its result is discarded, and then 3
is evaluated and returned as the result of the whole comma expression, which is returned by the return statement later.
关于 Expressions 和 声明
Additional informations about Expressions and Statements
表达式是一系列运算符及其操作数,用于指定计算.
An expression is a sequence of operators and their operands, that specifies a computation.
x = 2,3;
是 表达式语句, x = 2,3
是这里的表达式.
x = 2,3;
is expression statement, x = 2,3
is the expression here.
后跟分号的表达式是语句.
An expression followed by a semicolon is a statement.
语法:attr(可选) 表达式(可选) ;(1)
return 2,3;
是跳转语句(return 声明),2,3
是这里的表达式.
return 2,3;
is jump statement (return statement), 2,3
is the expression here.
语法:attr(optional) return expression(optional) ;(1)
这篇关于C ++中逗号运算符的不同行为与返回?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C ++中逗号运算符的不同行为与返回?
基础教程推荐
- 为 C/C++ 中的项目的 makefile 生成依赖项 2022-01-01
- 如何在不破坏 vtbl 的情况下做相当于 memset(this, ...) 的操作? 2022-01-01
- 管理共享内存应该分配多少内存?(助推) 2022-12-07
- 如何使图像调整大小以在 Qt 中缩放? 2021-01-01
- Windows Media Foundation 录制音频 2021-01-01
- 为什么语句不能出现在命名空间范围内? 2021-01-01
- 在 C++ 中循环遍历所有 Lua 全局变量 2021-01-01
- 从 std::cin 读取密码 2021-01-01
- 使用从字符串中提取的参数调用函数 2022-01-01
- 如何“在 Finder 中显示"或“在资源管理器中显 2021-01-01