繁体   English   中英

对左值执行算术运算

[英]Performing arithmetic operations on lvalue

我了解以下C ++表达式

j * 4 = 7; // C2106

是不正确的,因为期望在左侧有一个左值。

如果我猜对了,变量j实际上是一个左值,但是执行算术运算j * 4得到一个右值。 因此,说对一个左值执行加法运算总是会导致一个右值吗?

如果是,此规则是否有例外?

注意 :让我们不要考虑此问题的指针。

内置运算符+ (一元和二进制), - (一元和二进制), * (二进制), /%<<>>毫无例外地产生prvalues(“ pure” rvalues)。 (其他各种运算符也是如此,您可能不认为它们是算术的。)此外,它们都要求其操作数是prvalue,因此,如果它们最初是左值,则它们会进行隐式的左值到右值转换。

您可能知道内置的复合赋值运算符会产生左值。 一个不太为人所知的事实是,内置的预增和预减运算符也会产生左值。 因此,也许它们反驳了您的假设:算术运算始终会导致右值。

如果重载运算符,则其返回类型的值类别可以是您想要的任何值。 如果需要,可以使operator+返回T& ,其中T是某些类或枚举类型。 那么加法的结果可能是左值。 但是,很难想到何时编写这样的运算符才有意义。

因此,说对左值执行加法运算总是将其更改为右值是正确的吗?

是。 编辑:其实不。 查看其他答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM