【发布时间】:2011-06-28 07:05:08
【问题描述】:
可能重复:
When all does comma operator not act as a comma operator?
comma(,) 什么时候充当运算符,什么时候充当分隔符?以及它的后果是什么。如果可能,请同时为两者提供小例子。
【问题讨论】:
标签: c++ comma-operator
可能重复:
When all does comma operator not act as a comma operator?
comma(,) 什么时候充当运算符,什么时候充当分隔符?以及它的后果是什么。如果可能,请同时为两者提供小例子。
【问题讨论】:
标签: c++ comma-operator
逗号在函数调用、函数声明、初始化器和变量声明中充当分隔符:
f(a, b);
int a[] = {2, 3, 4};
int c = 2, d = 3;
相比之下,当用于分隔语句时,它表现为逗号运算符:
a = 2, b = 3;
c = (doSomething(), doSomethingElse(), result());
它产生的结果是它最右边的操作数的值,并且保证执行顺序是从左到右,这与函数参数的未定义求值顺序相反。
【讨论】:
int a = 2, b = 3;与a = 2, b = 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());
【讨论】:
基本上,它在需要表达式的任何地方都充当运算符(与表达式列表相反)。
【讨论】: