我假设重载构造函数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;
}
答案 0 :(得分:1)
这不是很好的C ++:
real r2 = (real) 3.4;
你想要的是这个:
real r2(3.4);
这是在C ++中将参数传递给构造函数的常用方法。这是人们在阅读您的代码时期望看到的内容。
如果您有需要分配的案例,可以这样做:
r2 = real(3.4);