Code Bye

一个模板优先级的问题

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);
试试看,

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;
}

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明一个模板优先级的问题