考虑this移动赋值运算符的规范形式:
class_name & class_name :: operator= ( class_name && )
当复制被禁用时,链接等于是不可能的,因为返回的值是 lvalue
并且从逻辑的角度来看它没有意义。我唯一可以看到(也许你有其他示例)返回值可用的地方是调用接受 reference/const reference
到 class_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/