1 回答

TA貢獻1777條經(jīng)驗 獲得超3個贊
您確實需要查看規(guī)格以獲取此類信息(并且很難理解措辭)。然而,直接從馬嘴里
12.18.3 復(fù)合賦值
x op= y
通過應(yīng)用二元運算符重載決議(第 12.4.5 節(jié))來處理表單的操作,就好像該操作是編寫的x op y.
然后,
如果所選運算符的返回類型可隱式轉(zhuǎn)換為 的類型
x
,則運算的計算結(jié)果為x = x op y
,但 x 僅計算一次。否則,如果所選運算符是預(yù)定義運算符,如果所選運算符的返回類型可顯式轉(zhuǎn)換為 的類型
x
,并且如果y
可隱式轉(zhuǎn)換x
為x = (T)(x op y)
,其中T
是 的類型x
,除了x
只計算一次。否則,復(fù)合賦值無效,并發(fā)生綁定時錯誤。
...
等等等等等等
...
上面的第二條規(guī)則允許在某些情況下
x op= y
進行評估。規(guī)則存在,使得預(yù)定義的運算符可以當(dāng)左操作數(shù)的類型的被用作化合物運營商,,,,或。即使兩個參數(shù)都是其中一種類型,預(yù)定義的運算符也會產(chǎn)生 int 類型的結(jié)果,如 §12.4.7.3 中所述。因此,如果沒有強制轉(zhuǎn)換,就不可能將結(jié)果分配給左操作數(shù)。x = (T)(x op y)
sbyte
byte
short
ushort
char
預(yù)定義運算符的規(guī)則的直觀效果很簡單,
x op= y
即如果x op y
和x = y
都允許,則允許。byte b = 0;char ch = '\0';int i = 0;b += 1; // Okb += 1000; // Error, b = 1000 not permittedb += i; // Error, b = i not permittedb += (byte)i; // Okch += 1; // Error, ch = 1 not permittedch += (char)1; // Ok每個錯誤的直觀原因是相應(yīng)的簡單分配也將是一個錯誤。
簡而言之,計算機說不。
- 1 回答
- 0 關(guān)注
- 247 瀏覽
添加回答
舉報