我有以下类作为基本类型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

09-06 15:12