增量赋值
增量赋值(Augmented assignment)或称复合赋值(compound assignment)是在一些编程语言中的一类赋值运算符。通常用于替代一条语句,其中的运算符把变量作为一个运算数,再把结果赋值给同一变量。例如x += 1
可展开为x = x + (1)
。常适用于算术运算符、移位运算符、位操作运算符等。
语义
在面向表达式语言如C语言中,增量赋值语句是表达式,因此允许右结合的连续的增量赋值,如下例:
a += b += c
而Python语言的赋值语句和增量赋值语句不是表达式,因此不允许上述用法。
C++语言的增量赋值表达式的值为左值。[1]因此允许下述用法:[2]
int x = 11;
(x *= 2) += 3; // Sets x to 25
在C语言、C++、Python中,增量赋值的赋值位置如果包括了函数调用,则强制只调用一次,如下例:
my_array[f1()] += 1
函数f1
被强制只调用一次。
如果下例的f1()是宏扩展:
my_array[f1()] = my_array[f1()] + 1
则f1
被调用两次。
常见的增量赋值运算符
C、C++、C#等语言中的“复合赋值运算符”:[1][3][4][5]
运算符 | 描述 |
---|---|
+=
|
加法 |
-=
|
减法 |
*=
|
乘法 |
/=
|
除法 |
%=
|
求余 |
<<=
|
向左移位 |
>>=
|
向右移位 |
&=
|
按位与 |
^=
|
按位异或 |
|=
|
按位或 |
语言支持
|
|
|
参见
- 增值和减值操作符—special case of augmented assignment, by 1
- IEEE 754 augmented arithmetic operation
参考文献
- ^ 1.0 1.1 Assignment Operators. cppreference.com. C++ Reference. [1 March 2021]. (原始内容存档于2022-04-14).
- ^ Stroustrup, Bjarne. The C++ Programming Language Fourth. Addison-Wesley. 2013. ISBN 978-0-321-56384-2.
- ^ ISO/IEC 9899:201x Committee Draft April 12, 2011 N1570. [2022-03-04]. (原始内容存档于2022-04-21).
- ^ Assignment and compound assignment operators. [2022-03-04]. (原始内容存档于2022-06-05).
- ^ C# Language Specification. Microsoft. [17 March 2014]. (原始内容存档于2017-01-28).