除了移动构造函数之外的c ++ rvalue引用重载

时间:2013-12-19 21:49:42

标签: c++ constructor overloading move rvalue

有人可以给出一个函数的例子,该函数重载了一个rValue引用参数而不是移动构造函数或移动赋值运算符,它充分利用了传递的参数是一个rvalue的事实?因此,它执行函数的左值参数版本的功能,但除了使复制或赋值更有效之外,还执行一些特殊的操作(仅仅因为传递了右值)。也许让其他一些行动更有效率?更好的是,在某些情况下可能需要一些额外的东西但是不能用左值进行?到目前为止,我想不出任何一个例子。

所以我问你自己的功能是否超载:

void ping (const Person& person) {
    // do something 
}

void ping (Person&& person) {
    // do what the first ping does but take advantage of the fact that an rvalue (a temporary?) was passed 
}

1 个答案:

答案 0 :(得分:4)

许多其他运算符在标准库中都有rvalue-reference重载,例如operator+表示字符串:

template<class charT, class traits, class Allocator>
basic_string<charT,traits,Allocator>
operator+(const charT* lhs,
basic_string<charT,traits,Allocator>&& rhs);

template<class charT, class traits, class Allocator>
basic_string<charT,traits,Allocator>
operator+(basic_string<charT,traits,Allocator>&& lhs,
const charT* rhs);

当然,push_backemplace_back以及容器中其余的insert / emplace系列函数:

void push_back(T&& x);
template <class... Args> void emplace_back(Args&&... args);