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)代码>