当前位置: 首页 > news >正文

C++ primer plus 第七节 函数探幽完结版

系列文章目录

  C++ primer plus 第一节 步入C++-CSDN博客
C++ primer plus 第二节 hello world刨析-CSDN博客
C++ primer plus 第三节 数据处理-CSDN博客
C++ primer plus 第四节 复合类型-CSDN博客
C++ primer plus 第五节 循环-CSDN博客
C++ primier plus 第七节 函数探幽第一部分-CSDN博客
C++ primier plus 函数探幽第二部分-CSDN博客


文章目录

  • 目录

    系列文章目录

    前言

    一  编译器选择使用哪个函数版本

    总结


前言

如果你坚持阅读到这里配合书本,那么你也是一个强者了,加油一起hard


一  编译器选择使用哪个函数版本

对于函数重载、函数模板和函数模板重载.C++需要(且有〉 一个定义良好的策略,来决定为函数调 用使用哪一个函数定义,尤其是有多个参数时。这个过程称为重载解析 (overloading resolution),详细解释这个策略将需要将近一章的篇幅, 因此我们先大致了解一下这个过程是如何进行的

• 第1步:创建候选函数列表。其中包含与被调用函数的名称相同的函数和模板函数

• 第2步:使用候选函数列表创建可行函数列表。 这些都是参数数目正确的函数为此有一个隐式转换序列,其中包括实参类型与相应的形参类型完全匹配的情况。 例如,使用 float参数的函数调 用可以将该参数转换为 double. 从而与 double 形参匹配,而模板可以为 float生成一个实例

• 第3步:确定是否有最佳的可行函数。如果有,则使用它,否则该函数调用出错

有没有发现这个跟我们之前学过的源代码进入到链接操作的时候差不多,链接不是会生成一个符号表嘛,这里生成一个函数列表,这个函数列表还是包括隐式转换序列的函数的,因为变成了实例化

下面我们来分析一个例子

首先我们输入了一个b字符,然后进行挑选这个要使用哪一个函数
接下来,编译器必须确定哪个可行函数是最佳的
它查看为使函数调用参数与可行的候选函数的参数 匹配所需要进行的转换。通常,从最佳到最差的顺序如下所述

1. 完全匹配,但常规函数优先于模板。
2. 提升转换(例如, char和 shorts 自动转换为时, float 自动转换为 double)。 3. 标准转换(例如, int转换为 char, long转换为 double)
4. 用户定义的转换,如类声明中定义的转换


我们根据这个来进行分析,首席按这个就是b嘛,这个4和5肯定是不可以的,,因为整数类型不能 被隐式地转换(即没有显式强制类型转换〉为指针类型,所以这个4和5直接被跳过

函数#1 优于函数#2, 因为 char到int的转换是提升转换,其实这个原本就是有一个整形提升的,而char到 float 的转换 是标准转换。函数的#3函数的#5和函数#6都优于函数#1 的,因为它们都是完全匹配的。 #3和#5优于#6,因为#6函数是模板

那么什么是完全匹配,什么是最佳匹配?

这个const是怎么理解呢?其实就是这个const只是适用于指针和引用,因为我们知道const修饰如果不匹配则会进行创建一个临时变量
其实作者觉得这个对于我们不需要进行深入研究,只需要有这个存在,我们现在学了也会忘记,那么我们九就只要有这个操作,后面在开发的过程中再来看这个规则就好了 


总结

介绍了编译器使用哪一个函数的版本

相关文章:

  • 【数据分析】转录组基因表达的KEGG通路富集分析教程
  • 第18周:YOLOv5-C3模块实现
  • 用Kotlin写一个Android闹钟
  • 边缘智联新基建:5G+边缘计算重塑制造业神经末梢
  • C语言 第三章 函数(2)
  • Spring 构造器注入和setter注入的比较
  • 【Python修仙编程】(二) Python3灵源初探(7)
  • c++ 调用 gurobi 库,cmake,mac
  • 云原生边缘计算:重塑分布式智能的时空边界
  • 在16卡服务器上使用最新版的CUDA和驱动训练`llama - 2 - 7b`和`llama - 2 - 70b`模型,并生成训练指标数据
  • MyBatis-Plus 使用技巧
  • 通过 Python 实现“机器学习”小项目教程案例:鸢尾花分类
  • 前端数据模拟 Mock.js 学习笔记
  • 基于Spring Boot的高校就业招聘系统的设计与实现(LW+源码+讲解)
  • Python关键字参数避坑指南:关键字参数开发中的参数顺序,参数覆盖,动态参数怎么使用?详细使用教程!
  • 基于51单片机的智能水箱控制系统proteus仿真
  • 信道编码中的硬判决与软判决
  • 高效数据管理:WPF中实现带全选功能的DataGrid复选框列
  • 从李佳琦团队看新型用工:灵活就业如何重构组织架构?
  • 【移动WEB开发】流式布局
  • asp网站乱码/优化推荐
  • 泉州 网站建设/百度员工收入工资表
  • 网上服务大厅登录平台/百色seo快速排名
  • 给我一个网站贴吧/上海专业seo
  • 高密专业网站建设价格/今日的新闻头条10条
  • 南宁微网站制作需要多少钱/免费文件外链网站