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

news2025/3/13 19:01:19

系列文章目录

  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修饰如果不匹配则会进行创建一个临时变量
其实作者觉得这个对于我们不需要进行深入研究,只需要有这个存在,我们现在学了也会忘记,那么我们九就只要有这个操作,后面在开发的过程中再来看这个规则就好了 


总结

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2311435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打破界限!家电行业3D数字化营销,线上线下无缝对接

家电行业正步入从增量市场向存量市场的转型期,消费者的观念日益成熟,对产品体验和服务质量的要求愈发严格。无论是线上电商平台还是线下实体店铺,提供个性化、增强体验感的产品与服务已成为家电市场未来发展的核心动力。51建模网凭借“3D数字…

13 【HarmonyOS NEXT】 仿uv-ui组件开发之Avatar组件进阶指南(四)

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! 文章目录 补充内容第四篇:打造高性能Avatar组件的终极优化秘籍1. 性能优化策略1.1 状态管理优化1.2 渲染性能优化 2. 资源优化2.1 图片…

[Vue warn]: Duplicate keys detected: ‘xxx‘. This may cause an update error.

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…

设计模式 - 工厂模式 精准梳理精准记忆

1、代码片段 - 带入理解 一、核心模式分类 简单工厂模式(编程习惯,非 GoF 设计模式)工厂方法模式(GoF 创建型模式)抽象工厂模式(GoF 创建型模式) 二、演变过程:咖啡店案例 初始实现…

NVIDIA(英伟达) GPU 芯片架构发展史

GPU 性能的关键参数 CUDA 核心数量(个):决定了 GPU 并行处理能力,在 AI 等并行计算类业务下,CUDA 核心越多性能越好。 显存容量(GB):决定了 GPU 加载数据量的大小,在 AI…

springboot项目使用中创InforSuiteAS替换tomcat

springboot项目使用中创InforSuiteAS替换tomcat 学习地址一、部署InforSuiteAS1、部署2、运行 二、springboot项目打包成war包 特殊处理1、pom文件处理1、排除内嵌的tomcat包2、新增tomcat、javax.servlet-api3、打包格式设置为war4、打包后的项目名称5、启动类修改1、原来的不…

Tomcat-web服务器介绍以及安装部署

一、Tomcat简介 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用…

18类创新平台培育入库!长沙经开区2025年各类科技创新平台培育申报流程时间材料及申报条件

长沙经开区打算申报企业研发中心、技术创新中心、工程技术研究中心、新型研发机构、重点实验室、概念验证中心和中试平台、工程研究中心、企业技术中心、制造业创新中心、工业设计中心等创新平台的可先备案培育入库,2025年各类平台的认定将从培育库中优先推荐&#…

使用 Elasticsearch 进行集成测试初始化​​数据时的注意事项

作者:来自 Elastic piotrprz 在创建应该使用 Elasticsearch 进行搜索、数据聚合或 BM25/vector/search 的软件时,创建至少少量的集成测试至关重要。虽然 “模拟索引” 看起来很诱人,因为测试甚至可以在几分之一秒内运行,但它们实际…

9. Flink的性能优化

1. Flink的资源和代码优化 1.1 slot资源配置 Flink中具体跑任务的进程叫TaskManager,TM进程又会根据配置划分出诺干个TaskSlot,它是具体运行SubTask的地方。slot是Flink用来隔离各个subtask的资源集合,这里的资源一把指内存,TCP…

【文生图】windows 部署stable-diffusion-webui

windows 部署stable-diffusion-webui AUTOMATIC1111 stable-diffusion-webui Detailed feature showcase with images: 带图片的详细功能展示: Original txt2img and img2img modes 原始的 txt2img 和 img2img 模式 One click install and run script (but you still must i…

华为:Wireshark的OSPF抓包分析过程

一、OSPF 的5包7状态 5个数据包 1.Hello:发现、建立邻居(邻接)关系、维持、周期保活;存在全网唯一的RID,使用IP地址表示 2.DBD:本地的数据库的目录(摘要),LSDB的目录&…

视频输入设备-V4L2的开发流程简述

一、摄像头的工作原理与应用 基本概念 V4L2的全称是Video For Linux Two,其实指的是V4L的升级版,是linux系统关于视频设备的内核驱动,同时V4L2也包含Linux系统下关于视频以及音频采集的接口,只需要配合对应的视频采集设备就可以实…

浅论数据库聚合:合理使用LambdaQueryWrapper和XML

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、数据库聚合替代内存计算(关键优化)二、批量处理优化四、区域特殊处理解耦五、防御性编程增强 前言 技术认知点:使用 XM…

CentOS 7.9 安装 ClickHouse 文档

1. 环境准备 确保系统为 CentOS 7.9,并已安装 Docker。如果未安装 Docker,请先安装 Docker。 安装 Docker # 卸载旧版本 Docker(如果有) sudo yum remove -y docker docker-client docker-client-latest docker-common docker-…

WPS条件格式:B列的值大于800,并且E列的值大于B列乘以0.4时,这一行的背景标红

一、选择数据区域 选中需要应用条件格式的区域(例如A2:E100 )。 二、打开条件格式 点击“开始”选项卡,选择“条件格式” > “新建规则”。 三、选择规则类型 选择“使用公式确定要设置格式的单元格”。 四、输入公式 在公式框中输入以…

MWC 2025 | 紫光展锐联合移远通信推出全面支持R16特性的5G模组RG620UA-EU

2025年世界移动通信大会(MWC 2025)期间,紫光展锐联合移远通信,正式发布了全面支持5G R16特性的模组RG620UA-EU,以强大的灵活性和便捷性赋能产业。 展锐芯加持,关键性能优异 RG620UA-EU模组基于紫光展锐V62…

AI-Ollama本地大语言模型运行框架与Ollama javascript接入

1.Ollama Ollama 是一个开源的大型语言模型(LLM)平台,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 Ollama 提供了一个简单的方式来加载和使用各种预训练的语言模型,支持文本生成、翻译、代码编写、问答等多种…

PROFINET转PROFIBUS从案例剖析网关模块的协议转换功能

一、 案例背景 在当下追求高效协同的工业自动化生产体系里,设备间的无缝互联互通堪称关键要素。某企业的生产车间中,有一台性能稳定的变频器,其配备的是PROFIBUS接口。与此同时,操控整个生产线的核心大脑——西门子1500 PLC&…

VEC系列-RabbitMQ 入门笔记

消息队列(MQ)对于开发者来说是一个经常听到的词汇,但在实际开发中,大多数人并不会真正用到它。网上已经有很多关于 MQ 概述和原理的详细讲解,官网文档和技术博客也都介绍得很深入,因此,我在这里…