逗号运算符的局限性

fud*_*din 2 c c++ comma-operator

我已经阅读了这个问题,我想补充说,使用逗号运算符无法完成的事情是什么.这让我很困惑,因为我能做到这一点:

int arr[3];
arr[0]=1,arr[1]=2,arr[2]=3;
Run Code Online (Sandbox Code Playgroud)

但当我这样做时:

int arr[3],arr[0]=1,arr[1]=2,arr[2]=3;
Run Code Online (Sandbox Code Playgroud)

它给了我一个编译器错误.

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

Mic*_*urr 10

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

int a0=1,a1=2,a2=3;
Run Code Online (Sandbox Code Playgroud)

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

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

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

容易想到的两个例外是在for语句的控制子句中,并且在宏中,绝对需要将多个"事物"塞入单个表达式中,甚至只有在没有其他合理选项时才能这样做.

  • @fahad:在某些情况下,逗号不是运算符,您链接的页面也会说:"逗号可以在某些上下文中用作分隔符,例如函数参数列表.不要混淆使用逗号作为分隔符它作为运营商的用途;两种用途完全不同" (4认同)

Jam*_*lis 5

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

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

void f(int, bool);

f(42, 32, true);   // wrong
f((42, 32), true); // right (if such a thing can be considered "right")
Run Code Online (Sandbox Code Playgroud)

你的例子是一个声明:

int arr[3],arr[0]=1,arr[1]=2,arr[2]=3;
Run Code Online (Sandbox Code Playgroud)

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