2011-02-11 54 views
14

使用static_cast將int轉換爲bool是否可以,因爲它會轉換隱式轉換的反轉,但我仍然會收到警告?爲什麼將一個int轉換爲一個bool會給出警告?

例子:

MSVC++ 8

bool bit = static_cast<bool>(100); 
+2

即使使用`-Wall -Wextra -ansi -pedantic`,g ++也不會抱怨這一點。你使用什麼編譯器?也許發佈精確的代碼? – Thomas 2011-02-11 10:41:28

+0

你的演員嚇壞了我。 – GManNickG 2011-02-11 10:49:17

+0

對我也是,編輯。 – user4344 2011-02-11 10:52:31

回答

45

僅僅因爲轉換a => b是隱含的並沒有說明反轉的可行性,b => a。

在你的情況下,你根本不應該施放。只是做了明顯的事情:比較:

bool result = int_value != 0; 

這是一個轉換到intbool唯一的邏輯正確的方式,它使代碼更可讀(因爲它使得假設明確)。

順便說一句,反過來也是一樣。隱含地從bool轉換爲int只是懶惰。使映射明確:

int result = condition ? 1 : 0; 
3

我不知道爲什麼會發生,當你明確地投它(我認爲這是一個性能警告?),但我通常使用代碼像這樣以避免任何警告:

int i; 
bool b = (0!=i); 

這永遠不會發出警告。

8

,你和你的編譯器之間的,但微軟認爲你應該寫:

i != 0 

優先於或者:

(bool)i 

static_cast<bool>(i) 

可能的原因寧願它包括:

  • 這種轉換不會像其他的窄轉換,是取模,
  • 的隱式的轉換爲bool也有點爭議:很多人喜歡在通話後做if (buf != NULL)if (buf != 0)優先於if (buf)malloc,
  • 比較結果既簡短又清晰。
-1

我一樣有人已經發布:

bool result = int_value != 0; 

這是國際海事組織更簡單的方法和它的更直觀的比試圖投的整數爲bool。

相關問題