?
Dokumen ini menggunakan Manual laman web PHP Cina Lepaskan
賦值和復(fù)合賦值運(yùn)算符是二元運(yùn)算符,它們使用右側(cè)的值將變量修改為左側(cè)。
Operator | Operator name | Example | Description | Equivalent of |
---|---|---|---|---|
= | basic assignment | a = b | a becomes equal to b | N/A |
+= | addition assignment | a += b | a becomes equal to the addition of a and b | a = a + b |
-= | subtraction assignment | a -= b | a becomes equal to the subtraction of b from a | a = a - b |
*= | multiplication assignment | a *= b | a becomes equal to the product of a and b | a = a * b |
/= | division assignment | a /= b | a becomes equal to the division of a by b | a = a / b |
%= | modulo assignment | a %= b | a becomes equal to the remainder of a divided by b | a = a % b |
&= | bitwise AND assignment | a &= b | a becomes equal to the bitwise AND of a and b | a = a & b |
|= | bitwise OR assignment | a |= b | a becomes equal to the bitwise OR of a and b | a = a | b |
^= | bitwise XOR assignment | a ^= b | a becomes equal to the bitwise XOR of a and b | a = a ^ b |
<<= | bitwise left shift assignment | a <<= b | a becomes equal to a left shifted by b | a = a << b |
| bitwise right shift assignment | a >>= b | a becomes equal to a right shifted by b | a = a >> b |
簡(jiǎn)單賦值運(yùn)算符表達(dá)式具有這種形式。
lhs = rhs |
---|
其中
lhs | - | modifiable lvalue expression of any complete object type |
---|---|---|
rhs | - | expression of any type implicitly convertible to lhs or compatible with lhs |
賦值執(zhí)行從 rhs 值到 rhs 類型的隱式轉(zhuǎn)換,然后用轉(zhuǎn)換后的 rhs 值替換由 lhs 指定的對(duì)象中的值。
賦值也返回與存儲(chǔ)的值相同的值lhs
(以便可能的表達(dá)式a = b = c
)。賦值運(yùn)算符的值類別是非左值(因此表達(dá)式(a=b)=c
無(wú)效)。
rhs 和 lhs 必須滿足以下條件之一:
lhs 和 rhs 都具有兼容的結(jié)構(gòu)或聯(lián)合類型,或..
rhs 必須可以隱式轉(zhuǎn)換為 lhs,這意味著
lhs 和 rhs 都有算術(shù)類型,在這種情況下lhs可能是揮發(fā)性限定的或原子的
lhs和rhs都有指向兼容(忽略限定符)類型的指針,或者其中一個(gè)指針是指向void的指針,并且轉(zhuǎn)換不會(huì)為指向類型添加限定符。lhs可能是揮發(fā)性的或限制性的或原子的。
lhs是一個(gè)指針(可能是限定的或原子的),rhs是一個(gè)空指針常量,如 NULL
lhs有類型_Bool
(可能是合格的或原子的),rhs是一個(gè)指針
如果 rhs 和 lhs 在內(nèi)存中重疊(例如它們是同一聯(lián)合的成員),則行為不確定,除非重疊是準(zhǔn)確的并且類型是兼容的。
雖然數(shù)組不可分配,但是包裝在結(jié)構(gòu)中的數(shù)組可以分配給具有相同(或兼容)結(jié)構(gòu)類型的另一個(gè)對(duì)象。
更新 lhs 的副作用在值計(jì)算之后進(jìn)行排序,但不是 lhs和 rhs 本身的副作用以及操作數(shù)的評(píng)估像往常一樣相對(duì)于彼此不相關(guān)(所以諸如i=++i
; 的表達(dá)式是未定義的)。
賦值從浮點(diǎn)表達(dá)式中剝離了額外的范圍和精度(請(qǐng)參閱參考資料FLT_EVAL_METHOD
)。
在 C ++中,賦值運(yùn)算符是左值表達(dá)式,而不是 C.
// todo more, demo struct{array} tooconst char **cpp;char *p;const char c = 'A'; cpp = &p; // Error: char ** is not convertible to const char ***cpp = &c; // OK, char* is convertible to const char**p = 0; // OK, null pointer constant is convertible to any pointer
復(fù)合賦值運(yùn)算符表達(dá)式具有這種形式。
lhs op rhs |
---|
其中
操作 | - | * =,/ =%=,+ = - =,<< =,>> =,&=,^ =,| =中的一個(gè) |
---|---|---|
lhs,rhs | - | 具有算術(shù)類型的表達(dá)式(其中l(wèi)hs可以是限定的或原子的),除了當(dāng)op是+ =或 - =時(shí),它們也接受與+和 - 相同限制的指針類型, |
表達(dá)式 lhs @ = rhs 與 lhs =
lhs @ (
rhs 完全相同)
,只是 lhs 只被計(jì)算一次。
如果 lhs 具有原子類型,則該操作表現(xiàn)為具有內(nèi)存順序 memory_order_seq_cst的單個(gè)原子讀取 - 修改 - 寫入操作。對(duì)于整數(shù)原子類型,復(fù)合賦值@ =相當(dāng)于:T1 * addr =&lhs; T2 val = rhs; T1 old = * addr; T1新; {new = old @ val} while(!atomic_compare_exchange_strong(addr,&old,new); | (自C11以來(lái)) |
---|
C11標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
6.5.16作業(yè)操作員(p:101-104)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
6.5.16作業(yè)操作員(p:91-93)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
3.3.16賦值運(yùn)算符