我看到这句话:(20, 30, 50)
当我cout << (20, 30, 50);
时,它会打印50
。
当我重写(a, b, c)
- a
时,b
,c
可以是char*
或int
- 它始终打印{{1} }}。有人为我解释一下吗?请。
答案 0 :(得分:6)
臭名昭着的comma operator再次罢工。逗号运算符计算参数,并在执行最后一个参数后返回值。
所以在你的情况下,(20,30,50)被程序解释为一个语句,评估20被调用,然后一个评估30,然后一个评估50.然而,只有最后一个语句的值是看到了,因此输出为50。
以下是与逗号运算符相关的堆栈溢出的更多问题,这将有助于您更好地理解其效果:
What does the comma operator , do?
答案 1 :(得分:4)
这是逗号运算符。默认情况下,它会计算第一个参数并返回第二个参数。
在您的情况下,表达式(20, 30, 50)
将评估20
和30
,然后返回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