我正在使用C ++中的运算符重载,特别是赋值运算符“=”。
所以,一次,我能够做到这一点:
MyClass var1;
var1 = "string";
但是,当我尝试这样做时,它会给我一个错误:
MyClass var2 = "string";
有人知道为什么吗?我怎样才能使它成为可能?
答案 0 :(得分:5)
第二个示例不是调用operator=
,而是调用const char []
的转换构造函数,或者在内部使用它的任何内容,只要它可以从中转换(例如{ {1}}),现在还不存在。你可以在std''OrgnlDave的答案中看到一个。
std::string
后者虽然是明确的,而前者是隐含的。要查看差异,请创建一个构造函数并将其标记为MyClass var2 ("string");
。这里的代码可以使用,但是你的代码不会。例如,当您偶然传递一个字符串而不是explicit
时,这可以避免混淆,并且当它首先不是MyClass
时,它会被隐式转换。< / p>
答案 1 :(得分:3)
您需要为您的类创建一个构造函数,第二个示例是调用构造函数。
class MyClass {
public:
MyClass(const std::string& what) { } // copy string
};