我已经读到逗号运算符用于分配表达式,并且向左值提供了正确的表达式。
但是为什么这个程序在不使用括号时将左表达式分配给左值?我正在使用涡轮增压 c 编译器。
int b=2;
int a;
a=(b+2,b*5); // prints 10 as expected
a=b+2,b*5; // prints 4 when not using parenthesis
还有以下作品:
int a =(b+2,b*5);
但这会产生一个错误:
int a =b+2,b*5; // Error
我不明白为什么。
因为,
运算符的优先级低于=
运算符的优先级,所以这...
a=b+2,b*5;
。实际上将被评估为...
a = b + 2;
b * 5;
int i = b + 2, b * 5;
有点不同,因为逗号在声明语句中具有不同的含义,将不同的声明彼此分开。考虑一下:
int a = 3, b = 4;
这里仍然有逗号,但现在它分隔了两个变量赋值。这就是编译器尝试从您的示例中处理该行的方式 - 但无法从b * 5
行中获得任何含义(它既不是赋值也不是声明)。
现在,int a = (b + 2, b * 5)
不同了:您将表达式的值b + 2, b * 5
分配给类型为 int
的变量a
。第一个子表达式被丢弃,只剩下b * 5
.