C++ 只移动对象 - 从赋值运算符返回什么

标签 c++

考虑this移动赋值运算符的规范形式:

class_name & class_name :: operator= ( class_name && )

当复制被禁用时,链接等于是不可能的,因为返回的值是 lvalue 并且从逻辑的角度来看它没有意义。我唯一可以看到(也许你有其他示例)返回值可用的地方是调用接受 reference/const referenceclass_name 的函数时:

void foo(class_name&){}
void bar(const class_name&){}

void use_foo_bar()
{
    some_class a;

    foo(a = get_some_class());
    bar(a = get_some_class());
}

但我认为这是一种糟糕的编程风格(个人观点),我不希望在代码库中看到它。

当复制被禁用或 void 返回类型正常时返回当前对象是否有意义?

最佳答案

您可能会争辩说链接从来都不是一件好事,并且总是给 operator= 一个 void 返回类型。

但是,如果您不这样做,请避免“这是只移动类型吗?”的心理负担。在编写 operator= 签名时,对所有类型都采用相同的方式。

编辑:换句话说,以通常的方式编写运算符比让代码的读者弄清楚为什么不这样做要少。

关于C++ 只移动对象 - 从赋值运算符返回什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26281279/

相关文章:

c++ - 寻找合适的工具来编写 future 风格的 UI 项目

c++ - 使用 Boost unordered_map

c++ - 使用 C++ 替换 std::string 中的子字符串但不是全部

c++ - 使用 GUID 作为 std::hash_map 中的键的 "right"方法是什么

c++ - C++ 17 make函数返回类型模板,然后为支持的类型编写实现

C++读取字节问题

c++ - 如果内存池比malloc快,为什么malloc不能在幕后使用它们?

c++ - 如何有条件地实例化不同的子类?

c++ - GLUT 显示部分桌面而不是我的代码中的内容

c++ - 用 swprintf_s 格式化 double 并发送到 OutputDebugStringW