拒绝C规则"a conditional expression does not yield an lvalue"的动机是什么?

What is the motivation to decline C rule "a conditional expression does not yield an lvalue"?

拒绝C规则的动机是什么a conditional expression does not yield an lvalue

换句话说:在 C 中,它是 not yield an lvalue 的动机(究竟是什么?)。为什么在 C++ 中这种动机被拒绝(或重新考虑)?

C++ 有引用; C 没有。

如果不是以下规则,您将无法从条件运算符的调用中绑定 [可变] 引用:

[expr.cond/5]: If the second and third operands are glvalues of the same value category and have the same type, the result is of that type and value category and it is a bit-field if the second or the third operand is a bit-field, or if both are bit-fields.

一个重要的原因(除了引用)是在C++中,你可以调用成员函数:

(true ? a : b).foo();。这将需要一个 this 指针,该指针将被设置为 &a&b。在C中,这当然是不可能的。