保持BOOL而不是bool

时间:2012-06-20 10:13:42

标签: c++ boolean

我知道,bool用于C ++,而BOOL是Microsoft特定类型,定义为int

我的代码正在使用BOOL,因为它是为Windows开始的,但我试图保持相同的方式而不将我的代码从BOOL更改为bool,当我是将它移植到Mac。

这样的事可以吗?

    typedef int8_t _Bool;         
    typedef _Bool (BOOL);
    static const BOOL False = 0;
    static const BOOL True = 1;

如果是,是否有更好的方法和原因?
如果没有,那么为什么以及我应该做什么呢?

4 个答案:

答案 0 :(得分:6)

我不明白为什么一个好的IDE无法从BOOL到bool进行全局变更。我希望有更大的便携性。我不喜欢typedef,因为它更难阅读。

答案 1 :(得分:3)

我在滚动您自己的bool时遇到的最大问题是,识别bool的模板规范无法识别BOOL,而是采用默认路由。具体来说,vector<bool>使用不同的代码库来通过在向量的表示中打包位来节省空间;使用vector<BOOL>将导致表示大约大八倍。

答案 2 :(得分:2)

您可以在最顶层的头文件中执行以下操作:

#ifndef /* MICROSOFT specific macro */
typedef bool BOOL;
static const BOOL True  = true;  // True  or TRUE
static const BOOL False = false; // False or FALSE
#endif

其他选项可以使用编译时选项来预定义宏,例如g++ -DBOOL=bool

答案 3 :(得分:1)

由于BOOL被定义为int,所以如果不检查某些代码是否以某种方式移植依赖,那么你就不知道int#if NOT_MICROSOFT typedef int BOOL; #define TRUE 1 #define FALSE 0 #endif 1}}。

因此,我会选择以下内容:

BOOL

如果您有机会检查您移植的代码是否能正常工作,无论int类型是bool还是bool,那么您很可能拥有有机会将其更改为使用int8_t(或使用{{1}},无论您喜欢什么)。