我有以下类作为基本类型bool
的包装器:
class MyBoolean {
public:
MyBoolean(bool value = false):value(value) {};
virtual ~MyBoolean() {};
void MySpecialFunction();
...
private:
bool value;
}
我想在表达式中使用
MyBoolean
作为普通的bool
。也就是说,为其分配,比较等。为此,我定义了赋值和隐式类型转换运算符。inline operator bool() const {
return value;
}
inline bool operator = (const bool &rhs) {
return value = rhs;
}
但是,似乎不需要赋值运算符。以下代码仅使用类型转换运算符进行编译,而没有赋值运算符进行编译:
MyBoolean b;
b = true;
为何编译器不抱怨它无法将
bool
分配给MyBoolean
? C++中不同类型的赋值运算符的默认实现是什么? 最佳答案
不需要赋值运算符的原因是因为您有一个非显式的converting constructor。当你做
b = true;
编译器发现可以使用以下命令将
true
转换为MyBoolean
MyBoolean(bool value = false):value(value) {};
由于获得了一个用户提供的转换,因此编译器将构造一个临时的
MyBoolean
,然后使用默认的副本分配运算符将其分配给b
。