2010-11-25 41 views
3

可能重複:
When should BOOL and bool be used in C++?重構MFC,你使用BOOL或BOOL

我目前正在整理一個大型的C++代碼庫,這主要是MFC,有很多BOOL變量和參數。它裏面還有一些bools,比較時會產生編譯器警告;

警告C4800:'BOOL:強制值bool「真」或「假」(性能警告)

的計劃是移動到一個全新的編譯沒有警告,在VS2008警告級別4。我的選擇如下:

  • 改變所有的bool到布爾值將改變所有
  • 布爾值將到布爾變量
  • 讓編譯器不報告警告4800

你會怎麼做,更重要的是爲什麼呢?我目前傾向於第一種選擇,因爲代碼中包含很多MFC,所以有許多返回BOOL的框架函數。

編輯糟糕,previously asked question給了我想要的信息。正在關閉...

+1

僅供參考,請參閱此C4800警告的討論:http://stackoverflow.com/questions/1847860/why-is-there-a-performance-warning-on-cast-pointer-to-bool – 2010-11-25 09:04:33

回答

3

將bool全局更改爲BOOL可能無助於您。你可能有函數返回布爾,或接受布爾。你可能會改變另一個問題。布爾BOOL也不能改變,因爲MFC(和Win32 API)使用布爾。

我會分別處理在我的代碼中生成的每個警告。更改BOOL爲BOOL可以做到簡單,編譯器無關:

BOOL myBOOL; bool mybool; 
mybool = (myBOOL != 0); 

其他的方式,也可能是通過顯式類型轉換(例如靜態鑄造),應刪除警告。

這個問題還有一個好處,那就是強制你檢查所有布爾轉換點的BOOL,並且你可能會發現其他問題(或不是:))。