【发布时间】:2017-03-23 13:36:42
【问题描述】:
使用右值引用,可能会省略许多冗余副本,但这似乎需要我多次编写相同的函数(一个用于右值引用,一个用于const 左值引用)。但是标准库似乎只需要声明一次函数。
例如:
#include <iostream>
#include <tuple>
void foo(int&& x){
x = 2;
}
int main()
{
int x = 1;
foo(x); // compile error
std::make_tuple(x); // ok
std::cout << x << std::endl;
}
调用foo(x) 是一个编译错误,因为我无法将int 隐式转换为int&&。但我很困惑为什么std::make_tuple 会起作用。 reference 表示它只接受右值引用参数。当传递给它的值是一个 ravlue 引用时,它似乎也不会进行复制,但在我上面的示例中使用时,它会复制(正如大多数人所期望的那样)。
我怎样才能让foo 像这样工作?
【问题讨论】:
标签: c++ function c++11 templates rvalue-reference