提问人:phy nju 提问时间:1/7/2018 最后编辑:phy nju 更新时间:1/7/2018 访问量:174
使用 Assignment 进行显式转换
Explicit conversion with Assignment
问:
具有显式转换构造函数的简单类。
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
答:
0赞
SoronelHaetir
1/7/2018
#1
你的问题的答案是“否”,没有办法允许 MyDouble d = 1。而不删除显式。
您可以简单地使用 MyDouble d(1.);或者 MyDouble d{1.};而不是使用赋值初始化。这将允许您保留显式内容,同时明确您正在初始化。
评论
0赞
juanchopanza
1/7/2018
吹毛求疵:它是复制初始化,而不是赋值初始化。
评论
a = 1.1;
MyDouble d = 1.1;
explicit
MyDouble d = 1.1
;这是否可以解释为构造一个新对象并将其分配为数字。d
1.1
vector<int> v = 5;