相关疑难解决方法(0)

为何使用!! 将int转换为bool时?

以这种方式将整数转换为布尔值的原因是什么?

bool booleanValue = !!integerValue;
Run Code Online (Sandbox Code Playgroud)

而不仅仅是

bool booleanValue = integerValue;
Run Code Online (Sandbox Code Playgroud)

我所知道的是,在VC++ 7中,后者将导致C4800警告而前者不会.这两者之间还有其他区别吗?

c++ integer boolean

76
推荐指数
6
解决办法
5万
查看次数

在C++中转换为bool的性能含义是什么?

[这个问题有关,但并不等同于这一个 ]

我的编译器警告隐式转换或将某些类型转换为bool,而显式转换不会产生警告:

long t = 0;
bool b = false;
b = t;                    // performance warning: forcing long to bool
b = (bool)t;              // performance warning
b = bool(t);              // performance warning
b = static_cast<bool>(t); // performance warning
b = t ? true : false;     // ok, no warning
b = t != 0;               // ok
b = !!t;                  // ok
Run Code Online (Sandbox Code Playgroud)

这是使用Visual C++ 2008但我怀疑其他编译器可能有类似的警告.

所以我的问题是:铸造/转换的性能影响是什么bool?在某些情况下(例如,对于某些目标体系结构或处理器),显式转换是否具有更好的性能?隐式转换是否会以某种方式混淆优化器?

微软对其警告的解释并不是特别有用.他们暗示有充分的理由,但他们没有解释.

c++ visual-c++

44
推荐指数
3
解决办法
8764
查看次数

将nullptr转换为bool

在C++之前的11天里,编写更好的做法是:

if (ptr == NULL)
Run Code Online (Sandbox Code Playgroud)

而不是:

if (!ptr)
Run Code Online (Sandbox Code Playgroud)

这有两个原因.它效率更高,因为它不需要强制转换为bool.并且无法保证宏NULL确实会评估为布尔值false.这在C++ 11中仍然如此吗?写作是否更可取

if (ptr == nullptr)
Run Code Online (Sandbox Code Playgroud)

而不是

if (!ptr)
Run Code Online (Sandbox Code Playgroud)

或者现在是第二次罚款?

c++ c++11

4
推荐指数
2
解决办法
3559
查看次数

标签 统计

c++ ×3

boolean ×1

c++11 ×1

integer ×1

visual-c++ ×1