我们称之为像C :: C(const C &&)这样的构造函数?除了禁止从const移动之外,还有它的用途吗?

san*_*orn 4 c++ constructor c++11

我可以声明三个构造函数

  • 复制构造函数 C::C(const C&)
  • 移动构造函数 C::C(C&&)
  • C::C(const C&&)

在一个没有歧义的课堂上.

我们称之为构造函数的是C::C(const C&&)什么?它有什么昵称吗?

我可以提出=delete明确禁止用户在不知不觉中尝试移动const并限制自动复制后备效果.这会提醒用户他们正在做什么.

还有其他用途吗?

Yak*_*ont 6

C::C(C const&&);
Run Code Online (Sandbox Code Playgroud)

我称之为const限定的移动构造函数.

它通知构造函数它(A)来自一个被丢弃的对象,(B)你不允许改变源对象的非const组件(因为对象可能实际上是const,在这种情况下,它们是未定义的行为).

C包含mutable状态的情况下,在某些情况下可以安全地移动该状态.如果它没有,它的行为很像a const&,除非组件C有自己的const&&移动构造函数.

在其他情况下,您可能想要=delete它.我个人不会.

  • @sandthorn不,短名称在经常谈论某些事情时很重要.这个移动构造函数值得打扰的情况是狭隘和模糊的. (4认同)