【发布时间】:2011-09-12 13:06:30
【问题描述】:
我试图理解为什么有人会编写一个采用 const rvalue 引用的函数。
在下面的代码示例中,const rvalue 引用函数的用途是什么(返回“3”)。 以及为什么重载解析优先于 const LValue 引用函数(返回“2”)之上的 const Rvalue。
#include <string>
#include <vector>
#include <iostream>
std::vector<std::string> createVector() { return std::vector<std::string>(); }
//takes movable rvalue
void func(std::vector<std::string> &&p) { std::cout << "1"; }
//takes const lvalue
void func(const std::vector<std::string> &p) { std::cout << "2"; }
//takes const rvalue???
//what is the point of const rvalue? if const I assume it is not movable?
void func(const std::vector<std::string> &&p) { std::cout << "3"; }
int main()
{
func(createVector());
return 0;
}
【问题讨论】:
-
VC++10.但在 gcc 上应该是一样的。 VC++10 具有符合标准的移动语义和重载解析。
-
@litb:这只是部分重复,关于重载解决方案的问题在另一个问题中没有真正解决。
标签: c++ c++11 lvalue rvalue overload-resolution