2016-11-29 85 views
1

我有一個變量,它可以從0到1不同,所以我想用一個bool類型用於保持該值。你可以使用C++中的bool和int操作符執行哪些操作?

C++基於這種想法是什麼操作都可以做我的第一個操作數布爾秒的整數或浮點數的類型?

例如,這是否有效?

bool exists; 
int value; 
(...) 
value += exists; 
value *= exists; 

如果是的話,直到C++這些值轉換成他們二進制佔有並沒有發現問題,這樣做對那些二進制數操作,它是有效做業務不同的操作數

+0

有意思,'bool b = false; b + = 10;'編譯在gcc上,我想知道這是什麼意思,儘管 – Slava

+0

@Slava,它意味着'bool'被提升爲'int',結果爲0,而算術運算結果爲10,而不是轉換爲' bool'結果爲1. – SergeyA

+0

@Sergey有趣,'++ b'又如何呢?編譯器會生成'b = true;'而不是在這種情況下? – Slava

回答

3

是存在這些操作,它們在C++標準部13.6實測值(注意,bool爲一個整數類型,這使得它的運算式爲好):

對於每一個三元組(LVQR),其中L是一個算術類型,VQ要麼volatile或爲空,並且R是促進的算術類型,存在的形式的候選操作員功能

VQ L & operator=(VQ L &, R); 
VQ L & operator*=(VQ L &, R); 
VQ L & operator/=(VQ L &, R); 
VQ L & operator+=(VQ L &, R); 
VQ L & operator-=(VQ L &, R); 

語義是在5.18節中定義:

形式E1op=E2的表達的行爲不同的是E1只計算一次相當於E1 = E1opE2。在+=和 - =中,E1應具有算術類型或是指向可能符合cv限定的完全定義的對象類型的指針。在所有其他情況下,E1應具有算術類型。

如果左操作數是類的類型不是,表達被隱式轉換(第4章)的左操作數的CV-非限定類型。

2

它是有效的操作數不同的操作?

value += exists; 
value *= exists; 

是它是有效的,在bool類型被隱式轉換爲int。這與您對運算符(+, - )使用混合的intshort操作數的操作類似。

+0

之間進行的。它被底層部件視爲一個字節。在這裏你可以看到一個C++輸入的例子,我使用bools就好像它們是整數一樣,但是你也可以看到'movzx eax,BYTE ...'等等。 http://ideone.com/iANO1w – Goodies