如何将bool转换为BOOL?

4
我可以安全地通过这个结构将C++的bool类型转换为Windows API的BOOL类型吗?
bool mybool = true;
BOOL apiboolean = mybool ? TRUE : FALSE;

我会认为这是肯定的,因为我没有看到任何明显的问题,但我想花一点时间来问一下,只是因为这可能比看起来更微妙。感谢 Dima(温柔地)指出我最初措辞不慎的地方。
3个回答

10

你的意思是什么?


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

如果是这样,那么是的,这个可以工作。


抱歉,你当然是对的。谢谢。我会修改我的问题。 - Onorio Catenacci

3

是的,那样做可以实现,但是

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

应该可以正常工作,反向操作也同样适用:

bool bb = (bool) apiboolean;

在这种情况下,您应该使用static_cast<BOOL>(b)。 - Dima
1
实际上,你应该让它隐式地为你转换。编译器知道如何在int和bool之间进行转换,而BOOL通常是某种int类型的typedef。 - Greg Rogers
1
Greg,将bool转换为int可能会起作用,但如果您尝试将int强制转换为bool,Visual Studio会发出警告。 - Dima
1
大家好,是的,我已经考虑了所有这些类型转换的方式——我只是问一下,因为我认为可能有一些微妙的问题我没有注意到。我认为我更喜欢Dima的方法,因为我所做的事情更加明显(为了维护此代码的任何人的利益)。 - Onorio Catenacci
我使用!!来将int转换为bool。这样可以避免警告,而且比static_cast打字更少。当然,看起来有点傻。 - Logan Capaldo
@Logan:我反对在int上使用!(原则问题)。此外,虽然它可能被优化为某些合理的东西,但“直接”(非优化)翻译是可怕的。 - James Curran

1

Visual Studio 2005 将简单地接受:

bool b = true;
BOOL apiboolean = b;

无需强制转换

请注意,BOOL->bool的转换并不像这样简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接