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

Direct Assignment Operator in C++

本文关键字:赋值运算符 C++      更新时间:2023-10-16

我在C++中玩运算符重载,特别是赋值运算符"="。

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

MyClass var1;
var1 = "string";

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

MyClass var2 = "string";

有人知道为什么吗?我怎样才能使它成为可能?

第二个例子不是调用operator=,而是调用const char []的转换构造函数,或者你在内部使用它的任何内容,只要它可以从中转换(例如 std::string ),目前尚不存在。你可以在std''OrgnlDave的答案中看到一个实现的。它几乎与

MyClass var2 ("string");

不过,后者是明确的,而前者是隐含的。要查看差异,请创建一个构造函数并将其标记为explicit。这里的代码可以工作,但你的代码不会。例如,当您意外传递字符串而不是MyClass时,这可以避免混淆,并且当它甚至不是一开始就不是MyClass时,它会被隐式转换。

你需要为你的类创建一个构造函数,第二个例子是调用构造函数。

class MyClass {
  public:
    MyClass(const std::string& what) {  } // copy string
};