所以我在某个地方遇到了这个问题:
案例一:
int a;
a = 1, 2, 3;
printf("%d", a);
案例二:
int a = 1, 2, 3;
printf("%d", a);
解释说:
第二种情况给出错误,因为逗号被用作分隔符,第一种情况 =
优先于 ,
所以它基本上是 (a=1) , 2, 3
;
但是我想问一下为什么在情况2中=
不优先于,
?
最佳答案
这不仅仅是一个优先级问题,而是一个语言语法问题:两种情况下的 =
不是同一个运算符:
在声明
int a = 1, 2, 3;
中,=
标记引入了一个不能是逗号表达式的初始值设定项。,
结束初始化程序,编译器发出错误,因为2
不是另一个变量的有效标识符。在语句
a = 1, 2, 3;
中,a = 1, 2, 3
是一个表达式,解析为(( a = 1), 2), 3
因为=
的优先级高于,
。=
是赋值运算符,右边是一个表达式,这个赋值是一个逗号运算符的左边操作数,
后面跟着一个常量表达式2
,a = 1, 2
本身是最终,
运算符的左操作数,其右操作数是3
。该语句等同于((a = 1), 2), 3);
,简化为a = 1;
。
关于c++ - 逗号作为分隔符和运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51120306/