拒绝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中,这当然是不可能的。
拒绝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中,这当然是不可能的。