• C++中函数模版和普通函数的区别


    函数模版和同名普通函数在同一个作用域中,会优先调用那个函数?

    函数模型在进行调用的时候会进行严格的类型匹配,而普通函数在调用的时候,会进行函数参数类型转换(前提是自动类型转换)。

    调用函数模版,本质是类型参数化,将要严格的按照类型进行匹配,不会进行自动类型转换

    调用普通函数,可以进行隐式的数据类型转换(前提是可以进行自动类型转换),这是普通函数和模版函数的本质区别。

    函数模版可以像普通函数被重载

    C++编译器优先考虑普通函数:这是因为普通函数已经存在了,而模版函数还需要进一步的判断

    如果函数模版产生一个更好的匹配,那么优先选择函数模版

    可以通过空模版实参列表的语法限制编译器只调用模版函数(也就是在参数名之后加上<>,隐含了自动类型推断!)

    C++编译器是如何支持模版机制的。

    编译器相关知识:

    编译C语言用GCC,编译C++用的是G++

    对于源程序的预处理,宏定义进行宏展开

    编译器

    汇编器

    连接器

    C++编译器提供的模版机制,就是通过二次编译,生成对应具体的函数,函数模版最终最终根据函数调用变成一个个函数,也就是和普通函数没有差别,也可以和普通函数发生函数重载。

    编译器并不是把函数模板处理成能够处理任意类的函数

    编译器从函数模板通过具体类型产生不同的函数

    编译器会对函数模板进行两次编译

    第一次编译在声明的地方对模板代码本身进行编译;第二次编译在调用的地方对参数替换后的代码进行编译。

    模板类派生的时候要指定父类的类型,用于内存空间大小的分配。

  • 相关阅读:
    mac sourceTree 每次操作提示需要密码
    docker-compose.yml开机启动
    详解Oracle 21c 中的只读Oracle主⽬录特性 (ROOH)
    使用kubeadm一键部署kubernetes集群
    Ubuntu18.04 开机自启动(需要 sudo 权限)
    nginx加载vue3 打包后的静态文件
    使用Docker搭建Nextcloud SSL站点
    Docker+Selenium+TestNG+Maven+Jenkins环境搭建
    Windows Server 2016安装AD并开启SSL
    Centos 环境配置内网 Yum 源
  • 原文地址:https://www.cnblogs.com/andyniu/p/7838423.html
Copyright © 2020-2023  润新知