使用Assignment进行显式转换

时间:2018-01-07 07:10:03

标签: c++ constructor assignment-operator explicit-conversion

带有显式转换构造函数的简单类。

class MyDouble {
    double d;
public:
    MyDouble() : d(0) {}
    explicit MyDouble(double d_) : d(d_) {}
    MyDouble & operator =(double d_) {
        d = d_; return *this;
    }
};

我故意添加一项作业,使其可以从double构建。

MyDouble a; 
a = 1.1;                    // this works
MyDouble b = MyDouble(1.1); // this works
MyDouble c(1.1);            // this works
MyDouble d = 1.1;           // this does not work 

我不想隐式转换,因为它会导致一些其他问题。但我仍然希望直接分配工作,但事实并非如此。无论如何都要使最后一个语句MyDouble d = 1.1;工作而不删除explicit关键字。

1 个答案:

答案 0 :(得分:0)

你的问题的答案是'不',没有办法让MyDouble d = 1。没有删除显式。

你可以简单地使用MyDouble d(1。);或MyDouble d {1。};而不是使用赋值初始化。这将允许您保留显式,同时也清楚您正在初始化。