模板功能参数演绎

时间:2017-08-08 05:19:28

标签: c++ templates

以下是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;。

1 个答案:

答案 0 :(得分:3)

这就是GCC表明参数是左值的方式。如果它说参数类型是T&,则意味着参数的类型为T并且是左值。如果它说参数类型是T(非引用),则意味着参数的类型为T并且是一个右值。