如何将 bool 转换为 BOOL?

Posted

技术标签:

【中文标题】如何将 bool 转换为 BOOL?【英文标题】:How do I cast a bool to a BOOL? 【发布时间】:2008-11-05 19:41:31 【问题描述】:

通过此构造将 C++ bool 转换为 Windows API BOOL 是否安全

bool mybool = true;
BOOL apiboolean = mybool ? TRUE : FALSE;

我认为这是肯定的,因为我没有看到任何明显的问题,但我想花点时间问一下,因为这可能比看起来更微妙。

感谢 Dima(温和地)指出我最初表达问题时的粗心。

【问题讨论】:

【参考方案1】:

你是说


bool b;
...
BOOL apiboolean = b ? TRUE : FALSE;

如果是这样,那么是的,这将起作用。

【讨论】:

呃。抱歉——你当然是对的。谢谢。我会解决我的问题。【参考方案2】:

是的,这会起作用,但是

bool b;
...
BOOL apiboolean = (BOOL) b;

应该同样有效,反之亦然:

bool bb = (bool) apiboolean;

【讨论】:

在这种情况下,您应该使用 static_cast(b)。 真的,你应该让它为你隐式转换。编译器知道如何在 int 和 bool 之间进行转换,而 BOOL 通常是某些 int 类型的 typedef。 Greg, bool to int 可能会起作用,但如果您尝试将 int 转换为 bool,Visual Studio 会给您一个警告。 大家好,是的,我考虑了所有这些铸造方式——正如我所说,我只是在问,因为我认为可能存在一些我遗漏的微妙问题。我认为我更喜欢 Dima 的方法,因为我所做的更加明显(为了维护此代码的任何人)。 我用!!对于 int -> bool。比 static_cast 避免警告和更少的输入。当然看起来有点傻。【参考方案3】:

Visual Studio 2005 将简单地接受:

bool b = true;
BOOL apiboolean = b;

无需强制转换

请注意,与 BOOL->bool 不同的是,反之亦然。

【讨论】:

以上是关于如何将 bool 转换为 BOOL?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 bool 转换为 int? [复制]

OCaml:将 bool 转换为 int

vs里面bool类型如何转换为string类型

如何最好地将 VARIANT_BOOL 转换为 C++ bool?

如何在golang中将bool转换为int8 [重复]

无法将 'Class::operator==' 从类型 'bool (Class::)(Class*) 转换为类型 'bool [关闭]