对左值执行算术运算
Performing arithmetic operations on lvalue
我知道以下C++表达式
j * 4 = 7; // C2106
不正确,因为左侧应有一个左值。
如果我猜对了,变量 j 实际上是一个左值,但执行算术运算j * 4
产生右值。因此,对不对说执行算术运算,例如对左值进行加法将总是产生右值?
如果是,此规则是否有任何例外?
注意:我们不要考虑这个问题的指针。
内置
运算符+
(一元和二进制(、-
(一元和二进制(、*
(二进制(、/
、%
、<<
和>>
产生 prvalue("纯"右值(,无一例外。(其他各种运算符也是如此,您可能不会将其视为算术运算符。此外,它们都要求其操作数是 prvalue,因此如果它们最初是左值,它们将经历隐式的右值到右值的转换。
您可能知道内置复合赋值运算符会产生左值。一个鲜为人知的事实是,内置的预递增和前递减运算符也会产生左值。因此,也许它们是您的假设的反例,即算术运算总是产生右值。
如果重载运算符,则其返回类型的值类别可以是所需的任何值。如果需要,您可以operator+
返回T&
,其中T
是某个类或枚举类型。那么加法的结果可能是左值。但是很难想到什么时候写这样的运算符才有意义。
因此,是否可以说执行算术运算(如对左值加法(总是将其更改为右值?
是的。编辑:其实不然。查看其他答案。
相关文章:
- 算术运算的结果类似于:C浮点变量中的1/3
- 更快的C++算术运算
- 为什么循环体中的一个基本算术运算执行得比两个算术运算慢
- 为什么对无符号字符进行算术运算会将它们提升为有符号整数
- 如何在 C++ 中计算字符串的算术运算
- 复数的算术运算
- 具有非常非常大数字的算术运算
- 如何使用C++中的处理器指令来实现快速算术运算
- boost::spirit::x3 phrase_parse 在进入 Vector 之前进行算术运算
- C++中混合数据类型的算术运算
- C++:编译器是否优化整数 + 浮点算术运算?
- 如何在特征中对二维数组的列执行简单的算术运算
- 使用数字列表和算术运算获取目标数字
- C++:“enable_if”用于限制支持特定算术运算的类型
- 如何正确避免 SIGFPE 和算术运算溢出
- 编译器用于编译 128 位整数的基本算术运算的技巧
- 将临时值存储为某种数据类型时,算术运算的标准规则是什么
- 相同的算术运算在 C++ 和 Python 中给出不同的结果
- 在 C++Amp 中并行执行的几种算术运算
- 对左值执行算术运算