6
class A;
const A getA();

A - 不可复制,可移动。

getA()- 构造并返回一个A, as const

这个怎么做?

const A a = getA();

我只能这样做。

const A& a = getA();
4

1 回答 1

10

不要按值返回const. 当您返回任何内容时,您是在说“来电者,这现在是你的了。用它做你想做的事”。如果您的方法的调用者不想修改它,他们可以将其存储为const,如上所示:const A a = getA();。但是你(作为一种方法)不应该告诉调用者他们的对象是否是const(你的返回值是他​​们的对象)。

如果你的返回值是const你不能move从它进入你的新对象,那么你的移动构造函数甚至不会被考虑。唯一的选择是复制,这也不起作用,因为在您的情况下它是不可复制的对象。如果返回是非常量的,您可以从中移出,并获得您想要的行为。

于 2013-06-12T12:20:07.080 回答