Mar*_* Ba 4 c++ boolean coding-style
使用Visual C++进行编程时,我认为每个开发人员都会看到警告
warning C4800: 'BOOL' : forcing value to bool 'true' or 'false'
Run Code Online (Sandbox Code Playgroud)
时.原因显然是BOOL被定义为int并且直接分配任何内置数值类型bool被认为是一个坏主意.
所以现在我的问题是,给定任何内置数值类型(int,short,...)将被解释为布尔值,实际将该值存储到类型变量中的首选方法是bool什么?
注意:虽然混合BOOL和bool可能是一个坏主意,但我认为无论是在Windows上还是在其他地方,问题都将不可避免地出现,所以我认为这个问题既不是Visual-C++也不是Windows特定的.
鉴于int nBoolean;我更喜欢这种风格:
bool b = nBoolean?true:false;以下可能是替代方案:
bool b = !!nBoolean;
bool b = (nBoolean != 0);
有一般的首选方式吗?什么道理呢?
我应该补充一下:由于我只使用Visual-C++,我无法确定这是否是VC++特定的问题,或者是否与其他编译器弹出相同的问题.因此,专门听取g ++或用户如何处理int-> bool案例会很有趣.
关于标准C++:正如David Thornley在评论中指出的那样,C++标准不需要这种行为.实际上它似乎明确地允许这个,所以有人可能认为这是VC++的怪异.引用N3029草案(这是我周围的atm.):
4.12布尔转换[conv.bool]
算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为bool类型的prvalue.零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.(......)
在使用win32 SDK和MFC的上下文中,我总是以这种方式编写它.这很明确.
bool b = (myBOOL != FALSE);
Run Code Online (Sandbox Code Playgroud)
编辑:我编辑:-)因为我不确定myBOOL == TRUE是否适用于BOOL的所有实现,我可以假设FALSE在大多数情况下可能具有0值.