增量賦值
增量賦值(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).