template<class T> void f(T&i) { cout<<1; } template<> void f(const int &i) { cout<<2; } int main(int argc, char *argv[]) { int i = 8; f(i); return 0; }
如上代码. 第二个模板函数假如没有const就属于”模板特化”,这个本人能理解,
加了const以后, f(i)就调用第一个模板,这个属于什么,为什么能编译通过?
在不改变模板函数的情况下, f(i)怎么修改能够调用到第二个模板函数?
解决方案
5
int i=8;
const int &j=i;
f(j);
试试看,
const int &j=i;
f(j);
试试看,
35
f(static_cast<const int&>(i));
const 限制过头了,要调用时再限制, 当然,假设i的类型就是const i就不用转换了….
int 和 const int是不同的类型..
#include <iostream> int main(int argc, char *argv[]) { int a = 0; const int b = a; std::cout << (std::is_same<decltype(a), decltype(b)>::value ? "true" : "false" ) << std::endl;; return 0; }