【发布时间】:2016-01-27 21:37:04
【问题描述】:
microsoft 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' : force value to bool 'true' or 'false' (performance warning)”
Microsoft 似乎认为它相当重要,并将其作为 3 级警告,但 Clang 显然认为并非如此,因为在 -Weverything,它的最高警告级别,对此的投诉为零。
C4800 是否存在任何现实世界中的错误,有人会指出它值得启用它?
【问题讨论】:
-
阅读措辞:“性能警告”。这只是警告您,这可能比您预期的要慢/贵一些。
-
性能下降也是一个错误 :) 你能想到一个现实世界的案例,即这个警告会指出你有一个不必要的性能下降吗?
-
如果您还没有找到它,this question 可能会让您感兴趣。第一个答案似乎表明“性能警告”不再是警告要指出的内容了。
-
这种转换通常不需要导致性能下降,在许多情况下它可能是空操作,因为实现不需要将
bool表示为一或零。仅当您将其转换回 int 或比较bools 时才会出现钳位值的要求 - 这应该很少见。 -
正如警告信息告诉你的,这不是潜在的错误,而是性能警告。