【问题标题】:comma operator and comma seperator in c++ [duplicate]C ++中的逗号运算符和逗号分隔符[重复]
【发布时间】:2011-06-28 07:05:08
【问题描述】:

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

comma(,) 什么时候充当运算符,什么时候充当分隔符?以及它的后果是什么。如果可能,请同时为两者提供小例子。

【问题讨论】:

标签: c++ comma-operator


【解决方案1】:

逗号在函数调用、函数声明、初始化器和变量声明中充当分隔符:

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;不同。
  • 仍然......该列表涵盖了一些但不是全部。即使所说的一切都是正确的,我也无法投票,因为它将事情搁置一旁,对于初学者来说,@Als 答案中显示的一些案例(为什么没有投票?)
【解决方案2】:

逗号为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()); 

【讨论】:

    【解决方案3】:

    基本上,它在需要表达式的任何地方都充当运算符(与表达式列表相反)。

    【讨论】:

      猜你喜欢
      • 2014-08-05
      • 2023-03-05
      • 1970-01-01
      • 2018-02-20
      • 2017-07-11
      • 2010-12-16
      • 2018-12-06
      • 2017-09-28
      • 1970-01-01
      相关资源
      最近更新 更多