如何按值返回一个不可复制的、可移动的对象作为const并存储它

How to return a non-copyable, movable object by-value as const and store it?

本文关键字:对象 可移动 const 存储 可复制 返回 何按值 一个      更新时间:2023-10-16
class A;
const A getA();

A -不可复制的,可移动的。

getA() -构造并返回A,如const

如何做到这一点?

const A a = getA();

我只能这样做。

const A& a = getA();

不按值返回const。当你返回任何东西时,你都在说:"来电者,这是你的了。"做你想做的事。"如果你的方法的调用者不想修改它,他们可以将它存储为const,就像你上面用:const A a = getA();所展示的那样。但是你(作为一个方法)不应该告诉调用者是否他们的对象是const(你的返回值是他们的对象)。

如果你的返回值是const,你不能从它到你的新对象的move,所以你的移动构造函数甚至不考虑。唯一的选择是复制,这也不起作用,因为在你的例子中,它是一个不可复制的对象。如果返回值为非const,则可以从它移开,并获得所需的行为。