C++ 为什么返回带有前缀inc/dec运算符的引用的函数是左值表达式,而不是后缀inc/dec运算符

C++ 为什么返回带有前缀inc/dec运算符的引用的函数是左值表达式,而不是后缀inc/dec运算符,c++,c++11,C++,C++11,为什么返回左值引用以及前缀递增/递减运算符的函数是左值表达式,而返回左值引用以及后缀递增/递减运算符的函数不是左值表达式 C++Primer,Lippman等人5/e提到: 返回左值引用的函数以及赋值、下标、解引用和前缀递增/递减运算符都是返回左值的表达式的示例。我们可以将左值引用绑定到这些表达式的结果 返回非引用类型的函数以及算术、关系、按位和后缀递增/递减运算符都会生成右值。我们不能将左值引用绑定到这些表达式,但可以将左值引用绑定到const,也可以将右值引用绑定到这些表达式* 我将尝试用@

为什么返回左值引用以及前缀递增/递减运算符的函数是左值表达式,而返回左值引用以及后缀递增/递减运算符的函数不是左值表达式

C++Primer,Lippman等人5/e提到:

返回左值引用的函数以及赋值、下标、解引用和前缀递增/递减运算符都是返回左值的表达式的示例。我们可以将左值引用绑定到这些表达式的结果

返回非引用类型的函数以及算术、关系、按位和后缀递增/递减运算符都会生成右值。我们不能将左值引用绑定到这些表达式,但可以将左值引用绑定到const,也可以将右值引用绑定到这些表达式*


我将尝试用@YSC给我的一些提示来回答这个问题。 不确定正确性。请社区帮助审阅此答案

对于前缀:

返回值(它是一个引用)可以递增(通过使用重载的prefix++运算符),它本身返回对同一对象的引用,可以赋值,从某种意义上说,该对象在整个前缀inc/dec操作中保持身份,因此它生成一个左值表达式

如果是后缀:

返回值和以前一样是一个引用,但现在必须创建对象的副本(通过引用返回),因为存在post inc/dec运算符

情况与此类似:

int i; 
i+1 = j

i+1不是左值表达式。i+1没有标识(内存分配),因此不能用作左值表达式。

您好,这是否回答了您的问题@YSC,它确实给了我一些提示,但没有直接回答我的问题。我必须研究这个暗示并得出答案,我现在正在做。谢谢你指出。新年祝福:-)你期待什么要做什么?