【发布时间】:2014-10-09 14:39:37
【问题描述】:
考虑 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返回类型正常时返回当前对象是否有意义?
【问题讨论】:
-
在链中写
std::move是可能的。 -
@LightnessRacesinOrbit 那就是……调用一个函数;)我不直接使用该值,我用它调用一个函数并使用该函数的返回
-
我真的看不出问题。
-
@LightnessRacesinOrbit a = b = get_some_class() 不同于 a = std::move(b = get_some_class())
-
而这一切的效用是......?
标签: c++