c++ - 中的逗号 - c语言运算符




C++中逗号运算符的不同行为与返回? (3)

从左到右评估逗号(也称为 表达式分隔 )运算符。 所以 return 2,3; 等于 return 3;

评估 x = 2,3;(x = 2), 3; 由于 运营商的优先权 。 评估仍然是从左到右, 整个 表达式的值为3, x 的副作用假定值为2。

这个(注意 逗号运算符 ):

#include <iostream>
int main() {
    int x;
    x = 2, 3;
    std::cout << x << "\n";
    return 0;
}

输出 2

但是,如果使用带逗号运算符的 return ,则:

#include <iostream>
int f() { return 2, 3; }
int main() {
    int x;
    x = f();
    std::cout << x << "\n";
    return 0;
}

输出 3

为什么逗号运算符的行为与 return 不同?


尝试应用简单的方法只是用括号突出显示优先级:

( x = 2 ), 3;

return ( 2, 3 );

现在我们可以看到二元运算符“,”从左到右以相同的方式工作。


这个说法:

  x = 2,3;

由两个 表达式 组成:

> x = 2
> 3

由于 运算符优先级 = 具有比逗号更多的优先级,因此评估 x = 2 并且 3 之后 。 那么 x 将等于 2

return

int f(){ return 2,3; }

语言语法是:

return <expression>

注意 return 不是表达式的一部分。

所以在这种情况下,将评估两个表达式:

> 2
> 3

但只返回第二个( 3 )。





comma-operator