使用分配进行显式转换

Explicit conversion with Assignment

本文关键字:显式转换 分配      更新时间:2023-10-16

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

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 

我不想要隐式转换,因为它会导致其他一些问题。但我仍然想要直接分配工作,但它没有。无论如何,在不删除explicit关键字的情况下使最后一个语句MyDouble d = 1.1;工作。

您的问题的答案是"否",没有办法允许MyDouble d = 1。 而不删除显式。

你可以简单地使用 MyDouble d(1.

(; 或 MyDouble d{1.}; 而不是使用赋值初始化。这将允许您保留显式内容,同时明确您正在初始化。