C++11 移动构造函数获取常量右值有什么意义?

C++11 移动构造函数获取常量右值有什么意义?,c++11,rvalue,move-constructor,C++11,Rvalue,Move Constructor,根据,;一个类可以有多个移动构造函数,例如T::T(const T&&)和T::T(T&&) 什么时候需要将常量rvalue传递给move构造函数 简单的答案是“永远不会” 但是,您确实可以编写如下函数: Foo const f(); 现在类似于foox=f()将使用Foo const&构造函数(如果可用)。但是它也会很乐意地绑定到Foo const&构造函数,而且由于两个引用都是常量,因此实际上不需要使用右值版本 特别是,这个构造函数有一个隐藏的“move”,因为,正如我们所建立的,引用是恒

根据,;一个类可以有多个移动构造函数,例如
T::T(const T&&)
T::T(T&&)

什么时候需要将常量rvalue传递给move构造函数

简单的答案是“永远不会”

但是,您确实可以编写如下函数:

Foo const f();
现在类似于
foox=f()
将使用
Foo const&
构造函数(如果可用)。但是它也会很乐意地绑定到
Foo const&
构造函数,而且由于两个引用都是常量,因此实际上不需要使用右值版本

特别是,这个构造函数有一个隐藏的“move”,因为,正如我们所建立的,引用是恒定的。

简短的回答是“从不”

但是,您确实可以编写如下函数:

Foo const f();
现在类似于
foox=f()
将使用
Foo const&
构造函数(如果可用)。但是它也会很乐意地绑定到
Foo const&
构造函数,而且由于两个引用都是常量,因此实际上不需要使用右值版本


特别是,这个构造函数有一个隐藏的“move”,因为,正如我们所建立的,引用是常量。

说得迂腐一点,引用是常量的事实并不妨碍您移动一些
可变的
资源。(当然,在12.8/3中它仍然被称为“move constructor”,即使在使用
const X&&
时也是如此)为了显得迂腐,引用const并不妨碍您移动一些
可变的
资源。(当然,在12.8/3中它仍然被称为“移动构造函数”,即使在使用
常量X&