设为首页 加入收藏

TOP

<一>函数模板(一)
2023-07-23 13:34:20 】 浏览:189
Tags:< >

函数模板
模板的意义:对类型也参数化
int sum1(int a,int b){return a+b;}
double sum2(double a ,double b){return a+b;}

几个概念
函数模板
模板的实例化
模板函数

模板类型参数
模板非类型参数

模板实参推演
模板的特例化
模板函数,模板的特例化,非模板函数的重载关系

点击查看代码
template<typename T,typename E> //定义一个模板参数列表 或者用 class T 也可以

bool compare(T x ){ //compare 是一个函数模板,它目前只是个模板
   cout<<"Template Compare"<<endl;
   return x>y;
}

int main(){
    //函数的调用点,在函数调用点,编译器用用户指定的类型,从原模板实例化一份函数代码出来
    // bool compare<int>(int a,int b){return a>b;}  这个从模板实例化出来的函数 就叫模板函数
    // bool compare<double>(double a, double b){return a>b} 这个从模板实例化出来的函数 就叫模板函数
    //模板函数是编译器根据指定的类型从模板实例化出来 参与编译的函数
    //从用户的角度来看,我们只写了一份模板代码,代码量是变少了,但是对于编译器来说,需要编译的代码没有减少,都需要根据指定的类型实例化出来具体函数
   
    compare<int>(1,2);//

    compare(100,200);//也可以,编译器会根据实参类型进行推演出 compare<int> 进行模板的实例化.

    //注意如果有compare<int>(1,2); 然后有compare(100,200);
    //编译器不会生成两套同样的 bool compare<int>(int a,int b){return a>b;},因为这个函数是需要在编译期间生成符号表,
    //如果生成两次,会出现在符号表中重名问题


    return 1;
}

示例代码2 不实例话模板 并查看编译后.o文件中的 符号表情况

点击查看代码
#include <iostream>
using namespace std;

template<typename T>
bool compare(T x,T y){
    return x,y;
}

int main(){
    return 1;
}

//编译后查看.o文件中的符号表信息如下 符号表中看不到compare函数的符号

kl@kl-ThinkPad-T580:/data/usershare/code/compile$ objdump -t test1.o

test1.o:     文件格式 elf64-x86-64

SYMBOL TABLE:
0000000000000318 l    d  .interp        0000000000000000              .interp
0000000000000338 l    d  .note.gnu.property     0000000000000000              .note.gnu.property
0000000000000358 l    d  .note.gnu.build-id     0000000000000000              .note.gnu.build-id
000000000000037c l    d  .note.ABI-tag  0000000000000000              .note.ABI-tag
00000000000003a0 l    d  .gnu.hash      0000000000000000              .gnu.hash
00000000000003c8 l    d  .dynsym        0000000000000000              .dynsym
00000000000004a0 l    d  .dynstr        0000000000000000              .dynstr
0000000000000576 l    d  .gnu.version   0000000000000000              .gnu.version
0000000000000588 l    d  .gnu.version_r 0000000000000000              .gnu.version_r
00000000000005c8 l    d  .rela.dyn      0000000000000000              .rela.dyn
00000000000006b8 l    d  .rela.plt      0000000000000000              .rela.plt
0000000000001000 l    d  .init  0000000000000000              .init
0000000000001020 l    d  .plt   0000000000000000              .plt
0000000000001050 l    d  .plt.got       0000000000000000              .plt.got
0000000000001060 l    d  .plt.sec       0000000000000000              .plt.sec
0000000000001080 l    d  .text  0000000000000000              .text
0000000000001258 l    d  .fini  0000000000000000              .fini
0000000000002000 l    d  .rodata        0000000000000000              .rodata
0000000000002008 l    d  .eh_frame_hdr  0000000000000000              .eh_frame_hdr
0000000000002060 l    d  .eh_frame      0000000000000000              .eh_frame
0000000000003d90 l    d  .init_array    0000000000000000              .init_array
0000000000003da0 l    d  .fini_array    0000000000000000              .fini_array
0000000000003da8 l    d  .dynamic       0000000000000000              .dynamic
0000000000003fa8 l    d  .got   0000000000000000              .got
0000000000004000 l    d  .data  0000000000000000              .data
0000000000004010 l    d  .bss   0000000000000000              .bss
0000000000000000 l    d  .comment       0000000000000000              .comment
0000000000000000 l    df *ABS*  0000000000000000              crtstuff.c
00000000000010b0 l     F .text  0000000000000000              deregister_tm_clones
00000000000010e0 l     F .text  0000000000000000              register_tm_clones
0000000000001120 l     F .text  0000000000000000              __do_global_dtors_aux
0000000000004010 l     O .bss   0000000000000001              completed.8059
0000000000003da0 l     O .fini_array    0000000000000000              __do_global_dtors_aux_fi
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/14/14
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【Visual Leak Detector】配置项 .. 下一篇为什么你的static_assert不能按预..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目