开发者社区 问答 正文

c++重载决议具体化优先于函数模板

template void f(T a){ cout << "aaaaaaa"; }
template <> void f(int & a){ cout << "fffffffffff"; }
int b;f(b);
为什么输出aaaaaaa,不是应该输出fffffffffff吗,看书上说具体化优先于模板函数的
求知道的大神指点下啦,万分感谢

展开
收起
a123456678 2016-03-06 13:13:48 2464 分享 版权
3 条回答
写回答
取消 提交回答
  • 乐于学习与分析

    另外关于函数模板的主模板和全特化版本之间的决议问题(函数模板只能全特换,不能偏特化(特化在template 后一个<>, 模板之后一个<>),偏特化可以用重载等效,当然全特化也可以用重载等效)。重载决议的顺序:普通函数 > 主模板(未特化的模板) > 全特换版本。(C++编程剖析问题、方案和设计准则 P43)

    2019-07-17 18:54:25
    赞同 展开评论
  • 软件开发,安全加密

    另外关于函数模板的主模板和全特化版本之间的决议问题(函数模板只能全特换,不能偏特化(特化在template 后一个<>, 模板之后一个<>),偏特化可以用重载等效,当然全特化也可以用重载等效)。重载决议的顺序:普通函数 > 主模板(未特化的模板) > 全特换版本。(C++编程剖析问题、方案和设计准则 P43)

    2019-07-17 18:54:25
    赞同 展开评论
  • #include <iostream>
    using namespace std;
    template <typename T>void f(T a){ cout << "aaaaaaa"; }
    void f(int & a){ cout << "fffffffffff"; }
    int main()
    {
     int b;
     f(b);
    }
    2019-07-17 18:54:25
    赞同 展开评论
问答分类:
C++
问答地址: