各位大侠,一个问题,看Exceptional C++时,小弟有些模糊,
在《Exceptional C++》中,第 45款 C++为何一定需要 bool ?
该书中列举了四种主要的以 C++ 语言其他设施实现 bool 的方法,并举述其缺
陷∶
其中第四个方法 (9/10分):
class BOOL {
public:
BOOL() { b_ = 0; }
BOOL(int x) { b_ = (x!=0 ? 1 : 0); }
BOOL& operator=(int x) { b_ = (x!=0 ? 1 : 0); return *this;}
operator int() const { return b_; }
const BOOL operator == (const BOOL x) { return x.b_ == b_ ? BOOL(1): BOOL(0); }
private:
unsigned char b_;
};
const BOOL TRUE(1);
const BOOL FALSE(0);
有谈到:如果为了要让 class 版本的 bool 可以支持上述的使用方法,
它又会干扰 overload resolution。 这个地方不是很明白。
我用了下面2个函数,并附带测试,用VC2008编译,貌似并无影响。。。大家是怎么理解的,可否指点一二?
void test(BOOL x) { std::cout << "in bool" << std::endl; }
void test(int x) { std::cout << "in int" << std::endl; }
BOOL x;
x = 3;
if (x == TRUE)
{
std::cout << (int)x.b_ << std::endl;
}
if (!x)
{
std::cout << (int)x.b_ << std::endl;
}
test(x);
------解决方案--------------------------------------------------------
你这个代码问题 你最后一排的代码 对私有成员进行了操作,是不行滴 我修改了下 我不知道你要的是不是这个 #include<iostream>
using namespace std;
class BOOL {
public:
BOOL() { b_ = 0; }
BOOL(int x) { b_ = (x!=0 ? 1 : 0); }
BOOL& operator=(int x) { b_ = (x!=0 ? 1 : 0); return *this;}
operator int() const { return b_; }
const BOOL operator == (const BOOL x) { return x.b_ == b_ ? BOOL(1): BOOL(0); }
private:
unsigned char b_;
};
const BOOL TRUE(1);
const BOOL FALSE(0);
void test(BOOL x) { std::cout << "in bool" << std::endl; }
void test(int x) { std::cout << "in int" << std::endl; }
void main()
{
BOOL x;
x = 3;
test(x);
}
------解决方案--------------------------------------------------------
#include<iostream>
using namespace std;
class BOOL {
public:
BOOL() { b_ = 0; }
BOOL(int x) { b_ = (x!=0 ? 1 : 0); }
BOOL& operator=(int x) { b_ = (x!=0 ? 1 : 0); return *this;}
operator int() const { return b_; }
const BOOL operator == (const BOOL x) { return x.b_ == b_ ? BOOL(1): BOOL(0); }
private:
unsigned char b_;
};