C++的引用坍缩和完美转发

C++的模板在进行参数转发时有一些奇怪的现象,所见并非所得,先来看下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
template<typename T>
void reference(T &v) {
printf("L value\n");
}
template<typename T>
void reference(T &&v) {
printf("R value\n");
}
template<typename T>
void fun(T &&x) {
reference(x);
}
int main() {
fun(1);
int x = 1;
fun(x);
return 0;
}

其中上面两行用于检测