【发布时间】: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 这就是我想说的,尽管您确实有更具体的方法。