有人可以给出一个函数的例子,该函数重载了一个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
}
答案 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_back
和emplace_back
以及容器中其余的insert / emplace系列函数:
void push_back(T&& x);
template <class... Args> void emplace_back(Args&&... args);