提问人:jakob 提问时间:5/5/2021 最后编辑:jakob 更新时间:5/5/2021 访问量:249
使用赋值运算符而不是隐式构造函数
Use assignment operators instead of an implicit constructor
问:
在我的程序中,我尝试使用赋值来分配我的类的对象。我专门尝试调用赋值运算符而不是隐式构造函数(因此是关键字)。当我尝试编译时,我收到 C2440 编译器错误:operator=
explicit
class MyClass {
public:
explicit MyClass(double x = 0.) :
m_x(x) {
}
MyClass& operator = (const double& other) {
m_x = other;
/* do something special here */
return *this;
}
private:
double m_x;
};
int main()
{
MyClass my_class = 2.; // C2440
return 0;
}
我猜编译器尝试隐式调用构造函数失败(因为)。有人有解决方法吗?explicit
答:
3赞
ChrisMM
5/5/2021
#1
MyClass my_class = 2.;
或多或少等效于 ,但是,您将构造函数标记为 ,这会阻止 C++ 自动执行此操作。MyClass my_class(2.);
explicit
所以,在你编写代码的方式中,你不能真正做你想做的事。可以使用以下命令显式调用构造函数:
MyClass my_class(2.); // Explcitly call your constructor
或者,正如 Ted Lyngmo 在评论中提到的,您可以这样做:
MyClass my_class; // Call your constructor with default argument of 0
my_class = 2.; // then call your assignment operator
评论
MyClass my_class; my_class = 2.;
Does anyone have a fix?
删除?有什么要解决的 - 一切都按预期工作 - 编译器失败的代码应该失败。你想如何解决它?explicit
MyClass my_class = 2.;
或多或少等同于 ,但是,你说它在 中,这使得它无效。MyClass my_class(2.);
explicit
MyClass my_class = 2;