如何为显式重载构造函数启用复制初始化?

时间:2016-04-30 11:25:09

标签: c++ constructor initialization

我假设重载构造函数explicit阻止了复制初始化,如果我确实需要它explicit怎样才能为下面的类启用复制初始化

class real {
public:
    explicit real(const double& value) : x(value) {}
    real(const real& other) : x(other.x) {}
    ~real() = default;

    real& operator= (const double& rhs) {
        this->x = rhs; 
        return *this;
    }

    operator double() {
        return this->x;
    }
private:
    double x;
};

int main(){

    real r1 = 3.4;  // Error
    real r2 = (real) 3.4;   // Ok : is this the only way ?

    return 0;
}

1 个答案:

答案 0 :(得分:1)

这不是很好的C ++:

real r2 = (real) 3.4;

你想要的是这个:

real r2(3.4);

这是在C ++中将参数传递给构造函数的常用方法。这是人们在阅读您的代码时期望看到的内容。

如果您有需要分配的案例,可以这样做:

r2 = real(3.4);