C++中的直接赋值运算符
Direct Assignment Operator in C++
我在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
};
相关文章:
- 重载Singly Linked List中的赋值运算符
- 使用赋值运算符重载从类中返回jobject
- 标准库类型的赋值运算符的引用限定符
- 复制构造函数、赋值运算符C++
- 标准::变体的赋值运算符
- 移动赋值运算符;尝试引用已删除的函数.我该如何解决这个问题?
- 基类和派生类的多态赋值运算符
- 为用户定义的类正确调用复制构造函数/赋值运算符
- CRTP 中的复制赋值运算符 - gcc vs clang 和 msvc
- 为什么初始化时没有调用重载赋值运算符?
- 赋值运算符重载和自赋值
- C++矢量复制构造函数和赋值运算符是否也复制保留空间?
- Qt PL/SQL - 赋值运算符 - 字符串缓冲区太小
- 对 r 值使用移动赋值运算符时的异常
- 由于没有使用赋值运算符,映射的值是如何初始化的?
- 默认赋值运算符如何在实际 STL 中实现
- 使用赋值运算符复制 std::vector
- C++ 通过自定义赋值运算符隐式转换函数参数
- 赋值运算符的奇怪行为
- C++赋值运算符,我们可以用 copy 替换它吗?