c++模板参数推导

c++ template argument deduce

本文关键字:参数 c++      更新时间:2024-03-29

Q1:

template  <typename  T> void print(const T &) {cout("INT &");}
template  <typename  T> void print( T  ) {cout("INT");}
int main() {
int i = 10;
print(i);
}

同谋者说";错误:重载的'print(int&('的调用不明确">

为什么?

是";常量T&quot;以及";T";是一样的吗?

问题2:

template <typename T> void f( T){cout("F-T");};
template <typename T> void f( const T*){cout("F-T*");};
int main() {
int ix = 43, *p=&ix;
const int ci = 0, *p2 = &ci;
f(p); // why result is "F-T"?
}

p是指针,非常量可以强制转换常量。

为什么f(p(选择f(T(?

对于问题1:两个重载都是相等的"好";其中CCD_ 1均被推导为CCD_。在没有"呼叫"的情况下进行呼叫是错误的;最好的";过载。也一样

void print(const int &) { std::cout << "const int &"; }
void print(int) { std::cout << "int"; }

对于问题2:第一个过载,T推导为int *,比第二个过载好,T推导为int