2011-12-15 66 views
1

時是否有使用複合賦值操作符來實現像這樣的一種方式:C++複合賦值乘以

a = (a * 10) + b; 

起初,我嘗試了以下內容:

a *= 10 + b; 

,但是這相當於:

a = a * (10 + b) 

只是好奇。今天穿過這個。這不是功課。

+3

根本就沒有。在分配發生之前,右手邊將被縮減爲表達式。 – Joe 2011-12-15 20:01:00

+0

'a'和'b'是你自己的類型還是原始的C++類型? – 2011-12-15 20:04:10

回答

6

如果你真的需要確保a只計算一次,你可以使用一個事實,即*=返回左值:

(a *= 10) += b; 

,但它幾乎沒有良好的代碼,我想可能是在調用之前未定義行爲到C++ 11由於修改a兩次(一次在* =和一次在+ =)沒有干預序列點。

0

https://ideone.com/WWudo

#include <iostream> 

using namespace std; 

int main() 
{ 
     int a = 5; 
     int b = 10; 
     (a *= b) += 10; 
     cout << a; 
     return 0; 
} 

輸出60