Exceptional C++

【Exceptional C++(27)】Bool

2018-01-30  本文已影响6人  downdemo

问题

解答

typedef int bool;
const bool true = 1;
const bool false = 0;
// 这种方法不允许重载bool,例如
// file f.h
void f(int); // OK
void f(bool); // OK,声明相同函数
// file f.cpp
void f(int) { ... } // OK
void f(bool) { ... } // 错误,重定义
// 另一个问题是跟这相同的代码
void f(bool b) {
    assert(b != true && b != false);
}
#define bool int
#define true 1
#define false 0
enum bool { false, true };
// 比起typedef的好处是允许重载
// 但在条件表达式不允许自动类型转换
bool b;
b = (i == j); // 错误,int不能隐式转换成enum
class bool {
public:
    bool();
    bool(int); // 允许在条件表达式中转换
    operator=(int);
    // operator int(); // 有问题
    // operator void*(); // 有问题
private:
    unsigned char b_;
};
const bool true(1);
const bool false(0);
// 如果不使用自动类型转换,无法用在条件判断中
bool b;
if (b) // 错误,不能转换与int或void*相似的类型
...
上一篇下一篇

猜你喜欢

热点阅读