gpt4 book ai didi

c++ - C4800 有任何实际值(value)吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:29 26 4
gpt4 key购买 nike

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': forcing value to bool 'true' or 'false' (performance warning)”

Microsoft 似乎认为它相当重要,并将其列为 3 级警告,但 Clang 显然认为它不是,因为它的最高警告级别 -Weverything 的投诉为零。

是否有人可以提出 C4800 指出的任何现实世界错误,值得启用它?

最佳答案

基本上,这只是警告您您正在将一些其他整数类型转换为 bool,并且此转换并非完全免费。

它主要存在(至少在我看来)是为了警告您将 bool 与其他整数类型混合使用,这不仅会导致性能略有下降,而且还可能表明代码中的一些困惑。查看问题中的代码:

  int i = 0;

// try..
// bool i = 0;

bool j = i; // C4800
j++;

...我们所拥有的看起来像是对之前将j 定义为int 类型的某些代码的不完整转换。 j 的定义已被编辑,所以它现在是 bool 类型,但我们仍然从 int 中为其分配一个值,并且 (更糟)在其上使用后增量,如果 j 的类型为 int,这两者都有意义,但对于 j 确实没有具有类型 bool

所以,问题是我们是否真正想要将比较结果分配给 j:bool j = (i != 0); 或者也许是将 i 也变成 bool 的更完整的转换:

bool i = false;

// ...
bool j = i; // no warning

j = true; // cleaner way of producing the same result as the post-increment.

关于c++ - C4800 有任何实际值(value)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35048538/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com