C++中的直接赋值运算符

Igo*_*ges 1 c++ operator-overloading

我正在使用C++中的运算符重载,特别是赋值运算符"=".

所以,一次,我能够做到这一点:

MyClass var1;
var1 = "string";
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这样做时,它会给我一个错误:

MyClass var2 = "string";
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?我怎样才能成功呢?

chr*_*ris 5

第二个例子不是调用operator=,它调用一个转换构造函数const char [],或者你在内部使用它的任何东西,只要它可以从那个(例如std::string)转换,它现在还不存在.你可以在std''OrgnlDave的答案中看到一个.它几乎完全相同

MyClass var2 ("string");
Run Code Online (Sandbox Code Playgroud)

然而,后者是明确的,而前者是隐含的.要查看差异,请创建一个构造函数并标记它explicit.这里的代码可以使用,但是你的代码不会.这可以节省混乱,当你,例如,意外的,而不是传递一个字符串MyClass,它被隐式转换时,它甚至不意味着是一个MyClass摆在首位.

  • 嗯...*它正在调用`std :: string`的转换构造函数*我想知道`std :: string`在整个问题中的位置...... (2认同)