使用赋值运算符而不是隐式构造函数
Use assignment operators instead of an implicit constructor
在我的程序中,我试图使用赋值 operator=
来赋值我的 class 的一个对象。我特别尝试调用赋值运算符而不是隐式构造函数(因此 explicit
关键字)。当我尝试编译时,我得到一个 C2440 Compiler Error:
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
)。有人有解决办法吗?
MyClass my_class = 2.;
或多或少等同于 MyClass my_class(2.);
,但是,您将构造函数标记为 explicit
,这会阻止 C++ 自动执行此操作。
因此,按照您编写代码的方式,您无法真正按照自己的意愿行事。您可以使用以下方式显式调用构造函数:
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
在我的程序中,我试图使用赋值 operator=
来赋值我的 class 的一个对象。我特别尝试调用赋值运算符而不是隐式构造函数(因此 explicit
关键字)。当我尝试编译时,我得到一个 C2440 Compiler Error:
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
)。有人有解决办法吗?
MyClass my_class = 2.;
或多或少等同于 MyClass my_class(2.);
,但是,您将构造函数标记为 explicit
,这会阻止 C++ 自动执行此操作。
因此,按照您编写代码的方式,您无法真正按照自己的意愿行事。您可以使用以下方式显式调用构造函数:
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