逗号运算符的局限性

时间:2010-12-28 15:56:21

标签: c++ c comma-operator

我已阅读this问题,我想补充说明使用逗号运算符 无法完成的内容。这让我很困惑,因为我能做到这一点:

int arr[3];
arr[0]=1,arr[1]=2,arr[2]=3;

但是当我这样做时:

int arr[3],arr[0]=1,arr[1]=2,arr[2]=3;

它给我一个编译器错误。

我想问一下逗号运算符在实际操作中的局限性是什么?

2 个答案:

答案 0 :(得分:10)

要意识到的一点是,并非所有在C中使用逗号都是逗号运算符的实例。将第二个示例更改为语法声明:

int a0=1,a1=2,a2=3;

逗号不是运算符,它们只是在列表中分隔声明符实例所需的语法。

此外,参数/参数列表中使用的逗号不是逗号运算符。

在我看来,使用逗号运算符几乎总是一个坏主意 - 它只会导致不必要的混淆。在大多数情况下,使用单独的语句可以更清楚地完成使用逗号运算符所做的事情。

很容易想到的两个异常是在for语句的控制子句中,并且在宏中,绝对需要将多个“事物”塞入单个表达式中,甚至只应该这样做当没有其他合理的选择时。)

答案 1 :(得分:5)

您可以在表达式可以出现的任何位置使用逗号运算符。有一些例外;值得注意的是,您不能在常量表达式中使用逗号运算符。

使用逗号运算符时也必须小心,其中逗号也用作分隔符,例如,在调用函数时,必须使用括号对逗号表达式进行分组:

void f(int, bool);

f(42, 32, true);   // wrong
f((42, 32), true); // right (if such a thing can be considered "right")

你的例子是宣言:

int arr[3],arr[0]=1,arr[1]=2,arr[2]=3;

在声明中,您可以通过用逗号分隔它们来声明多个内容,因此这里逗号也用作分隔符。此外,你不能只是将表达式添加到这样的声明的末尾。 (请注意,您可以使用int arr[3] = { 1, 2, 3 };)获得所需的结果。