【发布时间】:2014-11-26 11:45:28
【问题描述】:
我有以下课程(这不是我真正的课程,只是为了说明目的):
class Number {
public:
Number() : value_(0) {}
explicit Number(int v) : value_(v) {}
Number(const Number & other){
value_ = other.value_;
}
Number& operator=(const int & v){
value_ = v;
return *this;
}
private:
int value_;
};
我可以执行以下操作,并且它们都可以正常工作:
void test_ok(){
Number x(3);
Number y = Number(3);
Number y2(x);
Number y3 = x;
Number u;
u = 3;
}
但是,以下给出了此编译器错误:不存在合适的构造函数来将“int”转换为“Number”
void test_error(){
Number z = 3;
}
如果我从第二个构造函数中注释“显式”这个词,那么编译器错误就消失了,显然自动转换工作正常。由于我想保留关键字“显式”,所以我缺少哪个构造函数?
提前致谢!
【问题讨论】:
标签: constructor copy-constructor implicit-conversion