【发布时间】:2016-08-20 02:33:38
【问题描述】:
pass() 引用参数并将其传递给reference,但是右值参数实际上称为reference(int&) 而不是reference(int &&),这是我的代码sn-p:
#include <iostream>
#include <utility>
void reference(int& v) {
std::cout << "lvalue" << std::endl;
}
void reference(int&& v) {
std::cout << "rvalue" << std::endl;
}
template <typename T>
void pass(T&& v) {
reference(v);
}
int main() {
std::cout << "rvalue pass:";
pass(1);
std::cout << "lvalue pass:";
int p = 1;
pass(p);
return 0;
}
输出是:
rvalue pass:lvalue
lvalue pass:lvalue
对于p,根据引用折叠规则很容易理解,但是为什么模板函数将v作为左值传递给reference()?
【问题讨论】:
标签: c++