以下是C ++ Primer第5版的一个练习:
template<typename T>
void f1(T, T){}
int i = 0, *p1 = &i;
const int *cp1 = &i;
f1(p1, cp1);
但编译器会生成错误:
no matching function for call to 'f1(int*&, const int*&)'
我不知道为什么错误包含点参考?我认为参数推导是&#39; f1(int *,const int *)&#39;。
答案 0 :(得分:3)
这就是GCC表明参数是左值的方式。如果它说参数类型是T&
,则意味着参数的类型为T
并且是左值。如果它说参数类型是T
(非引用),则意味着参数的类型为T
并且是一个右值。