逗号运算符:,
允许对两个语句进行分组,其中有一个是预期的。
expression , expression
逗号运算符具有从左向右的关联性。 由逗号分隔的两个表达式将从左向右进行计算。 始终计算左操作数,并且在计算右操作数之前将完成所有副作用。
在某些上下文(如函数自变量列表)中,逗号可用作分隔符。 不要将该逗号用作分隔符与将其用作运算符的情况混淆;这两种用法完全不同。
请考虑表达式 e1, e2
。 该表达式的类型和值是 e2 的类型和值;e1 的计算结果将被丢弃。 如果右操作数是左值,则结果为左值。
在通常将逗号用作分隔符的方案中(例如,在函数或聚合初始值设定项的自变量中),逗号运算符及其操作数必须包含在括号中。 例如:
func_one( x, y + 2, z );
func_two( (x--, y + 2), z );
在上面的对 func_one
的函数调用中,会传递以逗号分隔的三个参数:x
、y + 2
和 z
。 在对 func_two
的函数调用中,圆括号强制编译器将第一个逗号解释为顺序计算运算符。 此函数调用将两个参数传递给 func_two
。 第一个参数是顺序计算运算 (x--, y + 2)
的结果,具有表达式 y + 2
的值和类型;第二个参数为 z
。
// cpp_comma_operator.cpp
#include <stdio.h>
int main () {
int i = 10, b = 20, c= 30;
i = b, c;
printf("%i\n", i);
i = (b, c);
printf("%i\n", i);
}
20
30