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&
)