C ++,这句话是什么意思?

时间:2015-06-24 09:49:22

标签: c++

我看到这句话:(20, 30, 50)

当我cout << (20, 30, 50);时,它会打印50

当我重写(a, b, c) - a时,bc可以是char*int - 它始终打印{{1} }}。有人为我解释一下吗?请。

3 个答案:

答案 0 :(得分:6)

臭名昭着的comma operator再次罢工。逗号运算符计算参数,并在执行最后一个参数后返回值。

所以在你的情况下,(20,30,50)被程序解释为一个语句,评估20被调用,然后一个评估30,然后一个评估50.然而,只有最后一个语句的值是看到了,因此输出为50。

以下是与逗号运算符相关的堆栈溢出的更多问题,这将有助于您更好地理解其效果:

What does the comma operator , do?

How does the Comma Operator work

Uses of C comma operator

答案 1 :(得分:4)

这是逗号运算符。默认情况下,它会计算第一个参数并返回第二个参数。

在您的情况下,表达式(20, 30, 50)将评估2030,然后返回50

与大多数C ++运算符一样,这​​可能会被重载,但是你看到它的频率远低于其他运算符。

答案 2 :(得分:0)

在本声明中

cout << (20, 30, 50); 

expression (20, 30, 50)是一个带逗号运算符的表达式。除了last之外的所有操作数都是丢弃的值表达式,它们的结果不使用,表达式的值是最后一个操作数的值。对于这个表达式,它是50。

考虑使用此运算符的另一个例子,它会更清楚

int x = 10;
cout << ( ++x, ++x, ++x );

输出为13。

int x = 10;
cout << ( x++, x++, x++ );

输出为12。

如果要输出所有值,20,30,50,则可以使用初始化列表。例如

for ( int x : { 20, 30, 50 } ) std::cout << x << std::endl; 

输出

20
30
50