c ++中的逗号运算符和逗号分隔符

时间:2011-06-28 07:05:09

标签: c++ comma-operator

  

可能重复:
  When all does comma operator not act as a comma operator?

什么时候逗号(,)表现为运算符?它什么时候表现为分隔符?它的后果是什么。如果可能,请为两者提供小例子。

3 个答案:

答案 0 :(得分:6)

逗号在函数调用,函数声明,初始值设定项和变量声明中表现为分隔符:

f(a, b);
int a[] = {2, 3, 4};
int c = 2, d = 3;

相反,当用于分隔语句时,它的行为与逗号运算符相同:

a = 2, b = 3;
c = (doSomething(), doSomethingElse(), result());

它产生的结果是其最右边的操作数的值,并且保证执行顺序是从左到右,与函数参数的未定义的评估顺序相反。

答案 1 :(得分:3)

逗号为Operator

逗号运算符(由标记表示)是一个二元运算符,它计算第一个操作数并丢弃结果,然后计算第二个操作数并返回该值(和类型)。逗号运算符具有任何C运算符的最低优先级,并充当序列点。

示例:

/int i = (5, 10);  /* 10 is assigned to i*/

逗号运算符的主要用途是在以下情况下产生副作用:

  • 调用函数。
  • 输入或重复迭代循环。
  • 测试条件。
  • 需要副作用但不立即需要表达结果的其他情况。

逗号为Separator

当与函数调用和定义一起使用时,逗号充当分隔符,其功能类似于宏,变量声明,枚举声明和类似结构。

示例:

int a = 1, 
b = 2; 
void fun(x, y);

另一个例子:

void fun(f1(), f2()); 

答案 2 :(得分:1)

基本上,它在任何地方都表现为需要表达式(而不是表达式列表)。