zoukankan      html  css  js  c++  java
  • C++中函数模版和普通函数的区别

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

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

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

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

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

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

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

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

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

    编译器相关知识:

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

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

    编译器

    汇编器

    连接器

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

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

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

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

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

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

  • 相关阅读:
    记一道乘法&加法线段树(模版题)
    2021CCPC网络赛(重赛)题解
    Codeforces Round #747 (Div. 2)题解
    F. Mattress Run 题解
    Codeforces Round #744 (Div. 3) G题题解
    AtCoder Beginner Contest 220部分题(G,H)题解
    Educational Codeforces Round 114 (Rated for Div. 2)题解
    Codeforces Global Round 16题解
    Educational Codeforces Round 113 (Rated for Div. 2)题解
    AtCoder Beginner Contest 182 F
  • 原文地址:https://www.cnblogs.com/andyniu/p/7838423.html
Copyright © 2011-2022 走看看