C++ 拒绝C规则“条件表达式不产生左值”的动机是什么?

C++ 拒绝C规则“条件表达式不产生左值”的动机是什么?,c++,language-lawyer,conditional-operator,lvalue,C++,Language Lawyer,Conditional Operator,Lvalue,拒绝C规则的动机是什么?条件表达式不产生左值 换句话说:在C语言中,这是一种动机,确切地说是什么?不让步不让步。为什么C++中的动机被拒绝或重新考虑?< /P> < P> C++有参考文献;C没有 如果没有以下规则,您将无法绑定来自条件运算符调用的[mutable]引用: 如果第二个和第三个操作数是相同值类别的glvalues,并且具有相同的类型,则结果为该类型和值类别,如果第二个或第三个操作数是位字段,或者如果两者都是位字段,则结果为位字段 C++有参考;C没有 如果没有以下规则,您将无法绑定

拒绝C规则的动机是什么?条件表达式不产生左值


换句话说:在C语言中,这是一种动机,确切地说是什么?不让步不让步。为什么C++中的动机被拒绝或重新考虑?< /P> < P> C++有参考文献;C没有

如果没有以下规则,您将无法绑定来自条件运算符调用的[mutable]引用:

如果第二个和第三个操作数是相同值类别的glvalues,并且具有相同的类型,则结果为该类型和值类别,如果第二个或第三个操作数是位字段,或者如果两者都是位字段,则结果为位字段


C++有参考;C没有

如果没有以下规则,您将无法绑定来自条件运算符调用的[mutable]引用:

如果第二个和第三个操作数是相同值类别的glvalues,并且具有相同的类型,则结果为该类型和值类别,如果第二个或第三个操作数是位字段,或者如果两者都是位字段,则结果为位字段


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


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

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


是吗?a:b.foo;。这将需要一个This指针,该指针将被设置为&a或&b。在C中,这当然是不可能的。我认为,他们的意思是,为什么C++会放弃C++所具有的规则。a:&b表示非位字段。@msalter确实是,但我猜比亚恩觉得这是不必要的。无论如何,值类别得到了一点改进,我想不出有什么特别好的理由让C做它做的事情,除了当时没有任何理由使事情复杂化之外。当然,最终我只是在理论化;我在最古老的设计文件中找不到任何理由。你可以用*真的&a:&b表示非位字段。@msalter确实是,但我猜比亚恩觉得这是不必要的。无论如何,值类别得到了一点改进,我想不出有什么特别好的理由让C做它做的事情,除了当时没有任何理由使事情复杂化之外。当然,最终我只是在理论化;我在最旧的设计文档中找不到任何理由。您可以在右值上调用成员函数,所以我不知道这是如何应用的?这是因为在使用右值表达式的每一个示例之前都会有某个对象的副本或新对象的创建吗?虽然我不认为这是每个seYou可以调用右值上的成员函数的值类别所固有的,所以我不知道这是如何应用的?这是因为在使用右值表达式的每一个示例之前都会有某个对象的副本或新对象的创建吗?虽然我不认为这是价值范畴本身固有的