C 条件运算符出现意外错误

C 条件运算符出现意外错误,c,conditional-operator,C,Conditional Operator,下面的代码编译得很好 int a=5,b=4,c; a>b?30:40; 也有, int a=5,b=4,c; a>b?c=30:40; 但为什么这不起作用呢 int a=5,b=4,c; a>b?c=30:c=40; 你被优先权咬了?:的优先级非常低,但没有=或,低(请参阅) 您的代码被解析为: (a>b ? c=30 : c) = 40; 而不是: a>b ? c=30 : (c=40); 在c=30周围不需要括号,因为?和:的作用类似于括号中的表达式

下面的代码编译得很好

int a=5,b=4,c;
a>b?30:40;
也有,

int a=5,b=4,c;
a>b?c=30:40;
但为什么这不起作用呢

int a=5,b=4,c;
a>b?c=30:c=40;

你被优先权咬了<代码>?:的优先级非常低,但没有
=
低(请参阅)

您的代码被解析为:

(a>b ? c=30 : c) = 40;
而不是:

a>b ? c=30 : (c=40);
c=30
周围不需要括号,因为
的作用类似于括号中的表达式



<信不信由你,<代码>(A>B.C=30:C)= 40 < /Cord>是有效C++(但不是有效C)。表达式
(a>b?c=30:c)
是一个引用变量
c
,该变量被赋值为
40

您正被优先级所咬<代码>?:的优先级非常低,但没有
=
低(请参阅)

您的代码被解析为:

(a>b ? c=30 : c) = 40;
而不是:

a>b ? c=30 : (c=40);
c=30
周围不需要括号,因为
的作用类似于括号中的表达式



<信不信由你,<代码>(A>B.C=30:C)= 40 < /Cord>是有效C++(但不是有效C)。表达式
(a>b?c=30:c)
是一个引用变量
c
,将
40
赋值给该变量。

您遇到了
=
运算符的优先级问题。如果坚持在三元运算符内部赋值,只需将子表达式用括号括起来:

int d = a > b ? (c = 30) : (c = 40); // explicit precedence

您遇到了
=
运算符的优先级问题。如果坚持在三元运算符内部赋值,只需将子表达式用括号括起来:

int d = a > b ? (c = 30) : (c = 40); // explicit precedence
最后一点:

int a=5,b=4,c;
a>b?c=30:c=40;
失败,因为它试图将
40
分配给
a>b?c=30:c
,这显然不起作用。
=
的优先级较低,
a>b?c=30:c
是一个有效的表达式(尽管您无法为其赋值)。在<代码> C=30 < /代码>中的<代码>=/COD>部分是例外,因为它位于三元运算符的中间,在<代码> 和<代码>:< /代码>。要修复它,您只需在
c=40
周围添加括号,以便将其作为三元运算符的“else”部分的单个值进行计算,即
a>b?c=30:(c=40)

第二个例子

a>b?c=30:40;
除非
a
大于
b
,否则不向
c
分配任何内容。。。当
a
5
b
4
时,如本例所示;但请注意,如果
a
不大于
b
,则不会发生赋值

从第一个例子

a>b?30:40
是一个有效的表达式,其值为
30
40
,但您没有使用该值执行任何操作,因此它当然没有任何用途

当然,您通常会使用类似于:

c = a>b ? 30 : 40;
哪里
a>b?30:40将计算为
30
40
,然后分配给
c
。但我怀疑您知道这一点,只是想知道为什么在最后一个示例中,三元运算符的'else'部分没有将
c=40
作为单个值处理。

最后一个:

int a=5,b=4,c;
a>b?c=30:c=40;
失败,因为它试图将
40
分配给
a>b?c=30:c
,这显然不起作用。
=
的优先级较低,
a>b?c=30:c
是一个有效的表达式(尽管您无法为其赋值)。在<代码> C=30 < /代码>中的<代码>=/COD>部分是例外,因为它位于三元运算符的中间,在<代码> 和<代码>:< /代码>。要修复它,您只需在
c=40
周围添加括号,以便将其作为三元运算符的“else”部分的单个值进行计算,即
a>b?c=30:(c=40)

第二个例子

a>b?c=30:40;
除非
a
大于
b
,否则不向
c
分配任何内容。。。当
a
5
b
4
时,如本例所示;但请注意,如果
a
不大于
b
,则不会发生赋值

从第一个例子

a>b?30:40
是一个有效的表达式,其值为
30
40
,但您没有使用该值执行任何操作,因此它当然没有任何用途

当然,您通常会使用类似于:

c = a>b ? 30 : 40;
哪里
a>b?30:40将计算为
30
40
,然后分配给
c
。但我怀疑您知道这一点,只是想知道为什么在上一个示例中,三元运算符的'else'部分没有将
c=40
作为单个值来处理。

这有效吗<代码>(a>b)?(c=30):(c=40)这行吗<代码>(a>b)?(c=30):(c=40)