c++ - 逗号作为分隔符和运算符

标签 c++ c

所以我在某个地方遇到了这个问题:

案例一:

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/

相关文章:

c - 中缀到后缀转换的输出中未知字符代替运算符

c++ - 自定义内存管理器在 Release模式下工作正常,但在 Debug模式下不行

c++ - C++中void中存储的值是什么

c++ - 如何告诉 netbeans 关于 pthread_barrier_t 的信息

c - 尝试计算 C : program prints 000. .... 中的阿姆斯特朗数并挂起

c - 如何在c中控制二维字符数组?

c++ - 类构造函数不起作用?

c++ - 暂时禁用特定版本 GCC 的警告

在共享内存中创建和访问结构

c++ - ARM Cortex M 处理器的 GNU 科学库编译错误