如何按值返回一个不可复制的、可移动的对象作为const并存储它
How to return a non-copyable, movable object by-value as const and store it?
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,则可以从它移开,并获得所需的行为。
相关文章:
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 为什么协程的返回类型必须是可移动构造的?
- 我应该使我的局部变量常量还是可移动的
- 对于参加可复制和可移动类的访问者来说,应该有多少过载?
- 如何获取类型是否真正可移动可构造
- 可移动但不可复制的对象:按值传递还是按引用传递?
- 对于可移动类型,按值传递比重载函数更好吗?
- 使用参数将仅可移动对象捕获到 lambda
- 从从可调用参数创建的线程对象参数移动构造 C++11 线程
- C++11/VS2010:返回包含不可复制但可移动对象的容器
- 传递可移动对象
- 无法将可移动对象与Boost.Asio一起使用
- 如何按值返回一个不可复制的、可移动的对象作为const并存储它
- 在std::函数中存储不可复制但可移动的对象
- 在std::pair中存储不可复制(但可移动)的对象
- Boost序列化不可复制但可移动的对象
- 包含boost::可选对象的std::矢量对象是否可以移动?可移动助推::可选
- 编译器是否在最后一次使用可移动对象时自动使用移动语义?
- 外部模板类std::可移动对象的容器
- 作用于可移动但不可复制对象序列的变化STL算法的行为