【发布时间】:2018-06-16 12:49:37
【问题描述】:
具有显式转换构造函数的简单类。
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; 工作。
【问题讨论】:
-
代码中唯一的assignment是
a = 1.1;。其余的不是赋值。 “我不想要隐式转换”...但是MyDouble d = 1.1;显然是在尝试执行隐式转换! -
“显式转换构造函数”是矛盾的:如果不是
explicit,构造函数就是正在转换。 -
MyDouble d = 1.1;这是否可以解释为构造一个新对象d并将其分配为数字1.1。 -
考虑到除非语言中出现新的特殊情况,否则
vector<int> v = 5;可以编译。 -
@phynju:否:初始化不是赋值。
标签: c++ constructor assignment-operator explicit-conversion