Luchian Grigore的回答指出,像下面这种情况:
a ? b : c = d
将始终被推断为
a ? b : ( c = d )
由于等号和三目运算符都是从右向左结合的,因此在C++中。
k = 21 > 3 ? j = 12 : j = 10;
并且。
k = 1 > 3 ? j = 12 : j = 10;
两种方式都可以。
在C语言中,
k = 21 > 3 ? 12 : j = 10
返回错误
invalid lvalue in assignment.
上面的内容应该被理解为(并且不返回错误)。
k= 21 > 3 ? 12 : ( j = 10 )
我猜现在它正在被分组为:
k = ( 21 > 3 ? 12 : j ) = 10
由于在C语言中(而不是C++),三目运算符不能返回lvalue,因此会出现错误。有人能告诉我在这种情况下运算符是如何分组的吗?
a ? b : c = d
是不同的!在其中一个中是a ? b : (c = d)
,而在另一个中是(a ? b : c) = d
。 - Kerrek SBk=(21>3?12:j=10)
。 - David Rodríguez - dribeas