微软C++编译器中的C4800警告如此描述:
https://msdn.microsoft.com/en-us/library/b6801kcy.aspx
使代码变为:// C4800.cpp
// compile with: /W3
int main() {
int i = 0;
// try..
// bool i = 0;
bool j = i; // C4800
j++;
}
抛出C4800警告:“'type' : forcing value to bool 'true' or 'false' (performance warning)”
微软似乎认为这很重要,并将其作为Level3警告,然而Clang显然认为它不是,因为在-Weverything(其最高警告级别)下没有任何投诉。
是否有任何现实世界的错误可以让人们想到C4800会指出它,从而值得启用它?
bool
表示为一或零。只有当您将其强制转换回int或比较bool
时,才需要限制值的要求 - 这应该相当罕见。 - skykingbool j = false;
,而对于MS编译器来说,这是一个运行时问题。 - M.M