我正在使用 C++ 中的运算符重载,特别是赋值运算符“=”。
所以,一次,我能够做到这一点:
MyClass var1;
var1 = "string";
但是,当我尝试这样做时,它给了我一个错误:
MyClass var2 = "string";
有人知道为什么吗?我怎样才能使它成为可能?
我正在使用 C++ 中的运算符重载,特别是赋值运算符“=”。
所以,一次,我能够做到这一点:
MyClass var1;
var1 = "string";
但是,当我尝试这样做时,它给了我一个错误:
MyClass var2 = "string";
有人知道为什么吗?我怎样才能使它成为可能?
第二个示例不是调用operator=
,而是调用 的转换构造函数const char []
,或者您将在内部使用它的任何东西,只要它可以从那个(例如std::string
)转换,目前还不存在。您可以在 std''OrgnlDave 的答案中看到一个实现。它几乎与
MyClass var2 ("string");
但是,后者是显式的,而前者是隐式的。要查看差异,请创建一个构造函数并标记它explicit
。这里的代码可以工作,但你的不行。例如,当您意外传递一个字符串而不是 a 时,这可以避免混淆MyClass
,并且当它最初甚至不应该是 a 时,它会被隐式转换MyClass
。
您需要为您的类创建一个构造函数,第二个示例是调用构造函数。
class MyClass {
public:
MyClass(const std::string& what) { } // copy string
};