【问题标题】:Why is forcing int to bool a performance issue?为什么强制 int 布尔性能问题?
【发布时间】:2020-08-14 02:34:16
【问题描述】:

在 Windows 上编译时,编译器会给出以下警告:

强制值为 bool 'true' 或 'false'(性能警告)

当我做类似的事情时会出现:

int a = ...
bool b = (a & (1 << 3);

解决办法是:

bool b = (a & (1 << 3)) != 0;

或者使用 int 代替 bool。

问题是:为什么第一种情况会导致性能问题,而第二种情况不会?另外,为什么我这样做时没有警告:

if (a & (1 << 3)) {
  ...
}

因为在这种情况下,值被转换为布尔值不是吗?

【问题讨论】:

  • 可以添加编译器信息吗?以及编译标志?
  • if 仅测试 真实 值,不一定转换为 bool
  • @tadman — 代码没有投射任何东西。你可以看到它。表达式的结果是“上下文转换为 bool”,这可能会或可能不会涉及生成实际的 bool 值,因为计算本身可能会设置适当的处理器标志。
  • @PeteBecker 这就是我想说的,尽管您确实有更具体的方法。

标签: c++ int boolean


【解决方案1】:

此警告是针对过时的 Visual Studio 2015 编译器在某些上下文中拼写错误的单词。现在听起来更正确了

从 int 到 bool 的隐式转换。可能的信息丢失

Compiler Warning (level 4) C4800

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 2012-01-17
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多