我無法理解此警告的以下行爲。「警告C4800不同情況下的不同行爲:'int':將值強制爲bool'true'或'false'」
case 1:
bool read = (33 & 3) ; //No Warning issued by vs 2013
case 2:
int b = 33;
bool read = (b & 3) ; //Now compiler is generating C4800 warning.
爲什麼編譯器的情況下,2產生警告,而它不在的情況下發出任何警告1.
嘛'字節和0x80'不返回一個bool。要實際避免警告而不是忽略它,請使用'byte&0x80!= 0',這會使轉換顯式化。 –
我完全意識到這一點,@Matthäus。重點是這是測試一般的常用方法,如果編譯器給我提出了一些警告,實際上它沒有幫助。同樣,我不會比較指向null的指針以查看它們是否爲null,我只是在需要布爾表達式的地方使用它們並使用隱式轉換。 –
'bool valid = ptr;'其中'ptr'是一些指針會在VC中觸發相同的警告,另一方面'if(i)'對於某些'int i'不會。所以VC提倡在表達不是上下文可轉換的情況下進行顯式轉換。實際上這與'explicit operator bool'是一致的。 –