【C++】3. 缺省参数

news2024/12/30 2:00:45

文章目录

  • 一、缺省参数的定义
  • 二、缺省参数的使用规则


一、缺省参数的定义

在c语言中,我们使用一个函数时,必须要传对应的参数,少一个都不可以。难道函数的参数就不能有个默认值吗?于是C++对c做出了改良,创造了缺省参数。

缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参。

例如:a,b叫作缺省参数
在这里插入图片描述


二、缺省参数的使用规则

  1. 缺省值必须是常量或者全局变量

  1. 函数参数可以只缺省一部分,且缺省的顺序必须依次从右往左
    参数全部缺省 叫做 全缺省参数
    参数部分缺省 叫做 半缺省参数(不是指缺省一半)
    在这里插入图片描述

问题:我设置函数Add(int a = 4, int b, int c = 6),传参时 Add(,5,);这种为什么不可以呢?
答:因为语法规定参数传递是依次从左向右(参数传递指的不是参数入栈,参数入栈是从右向左),不能跳着传,至于为什么?你只能去问c++祖师爷本贾尼。


  1. 缺省参数不能在函数声明和定义中同时出现,且需要在函数声明里出现

错误示范
在这里插入图片描述

请问:缺省参数为什么应该出现在声明里呢?
答:缺省参数应该写在函数声明里而不是函数定义里是因为在函数声明中定义默认参数可以让调用者在使用函数时就知道可以传递哪些参数,而不必查看函数定义的细节。此外,函数声明也允许在多个源文件中共享同一个函数原型,这有助于避免重复定义默认参数(chatgot搜到的答案)

我个人的理解如下(不一定正确):
编译器的编译链接过程如下:
在这里插入图片描述
本程序中
在这里插入图片描述
从上可以看出,test.cpp中使用的Add,需要到链接时才能真正使用到Add的真实地址。在没到达链接阶段,Add函数形式就是声明时的形式,所以缺省值放在函数声明里
正确书写示范:
在这里插入图片描述
那如果声明和定义放在一起呢?(如下,程序报错)但用我刚才的解释又解释不了。
在这里插入图片描述
至于真实的原因是什么?如果你知道,不妨在评论发表你的看法。


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

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

相关文章

opencv-4.1.2及opencv-contrib_4.1.2编译解决方案

一、首先在官网上下载opencv-4.1.2及opencv_contrib-4.1.2源码,两者需要保持版本一致,注意目录名称不要包含汉字。 二、到官网下载cmake-3.23.1-windows-x86_64 三、安装vs2017 四、安装Qt5.14.1选则msvc2017_32位、msvc2017_64位、mingw_32位、mingw_64…

【MySQL入门指南】数据库基本操作

文章目录MySQL库操作一、SQL语句二、创建数据库1.语法2.案例3.极其不推荐的方式三、查看数据库1.语法四、修改数据库五、删除数据库六、字符集与校验规则1.是什么2.相关指令3.校验规则的影响七、备份数据库1.基本语法2.注意事项MySQL库操作 一、SQL语句 DDL(data definition l…

算法的时间复杂度和空间复杂度(数据结构)

目录 1、算法效率 1>如何衡量一个算法的好坏 2>算法的复杂度 2、时间复杂度 1>时间复杂度的概念 2>大O的渐进表示法 2>时间复杂度计算例题 1、计算Func2的时间复杂度 2、计算Func3的时间复杂度 3、计算Func4的时间复杂度 4、计算strchr的时间复杂度 5、计算Bubb…

Android双目三维重建:Android双目摄像头实现双目测距

Android双目三维重建:Android双目摄像头实现双目测距 目录 Android双目三维重建:Android双目摄像头实现双目测距 1.开发版本 2.Android双目摄像头 3.双目相机标定 (1)双目相机标定-Python版 (2)双目相机标定-Matlab版 4.相机参数配置 5.Android 双…

【微服务笔记11】微服务组件之Hystrix服务监控的三种方式

这篇文章,主要介绍微服务组件之Hystrix服务监控的三种方式。 目录 一、Hystrix服务监控 1.1、Actuator实现服务监控 (1)引入依赖 (2)开放hystrix.stream端点 (3)运行测试 1.2、dashboard实…

分支机构防火墙里面的为PN怎么配置连接总部防火墙

环境: 分部:防火墙 8.0.48 AF-1000BB1510 总部:防火墙 8.0.75 AF-2000-FH2130B-SC 问题描述: 分支机构防火墙里面的为PN怎么配置连接总部防火墙 解决方案: 一、总部防火墙配置 1.sangfor 为pn配置 基本配置&a…

leetcode492. 构造矩形

题目描述解题思路执行结果leetcode 492. 构造矩形题目描述 作为一位web开发者, 懂得怎样去规划一个页面的尺寸是很重要的。 所以,现给定一个具体的矩形页面面积,你的任务是设计一个长度为 L 和宽度为 W 且满足以下要求的矩形的页面。要求&…

实例六:MATLAB APP design- 凸透镜成像光学研究小工具

该博文包含APP设计中Plot和Hold on的用法 在MATLAB APP design中,Hold on对应的代码为app.UIAxes.NextPlot=add; 其中app.UIAxes为坐标区域名字。 注:博文最后链接中包括MATLAB源代码及MATLAB APP design设计代码 一、APP 界面设计展示 注:在文本框中输入焦点和入射点…

含有分布式电源的三相不平衡配电网潮流计算【IEEE33节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Linux驱动IO篇——ioctl设备操作

文章目录ioctl命令编码规则ioctl系统调用过程驱动层实现应用层示例应用程序如果想要设置/获取驱动层的数据,一般是驱动提供一个ioclt接口,然后应用层调用。因此,学会在驱动中实现ioctl接口是必要的一项技能。 ioctl命令编码规则 想要定义一个…

每天一道大厂SQL题【Day20】华泰证券真题实战(二)表转置

每天一道大厂SQL题【Day20】华泰证券真题实战(二) 大家好,我是Maynor。相信大家和我一样,都有一个大厂梦,作为一名资深大数据选手,深知SQL重要性,接下来我准备用100天时间,基于大数据岗面试中的经典SQL题&…

SpringBoot配置加载机制

目录 前言 官方文档:SpringBoot配置加载机制 外化配置加载顺序 application.properties默认位置 命名风格 Spring Boot 中的 ConfigurationProperties 定制PropertySource 主要步骤 切入位置 加载自定义properties文件 自定义文件(yapf.propert…

PM866-2 3BSE050201R1未来的工业将会更加智能化。

PM866-2 3BSE050201R1未来的工业将会更加智能化。 ​ 从工业到智慧工业,半导体厂商可以做什么? 从第一次工业革命开始到现在,工业领域发生了翻天覆地的变化,现在及未来的工业将会更加智能化。 意法半导体(ST&#xf…

南卡全新开放式OE Pro蓝牙耳机震撼上市,行业新标杆,再迎巅峰

近日,Nank南卡全新发布了一款不入耳开放式蓝牙耳机,创新打破无限可能。根据目前透露,新发布的南卡OE Pro不管是音质还是佩戴舒适度都一如既往的好,比市场内其他品牌的开放式耳机要高出几倍,各大媒体猜测,Na…

AI作画生成器,AI作画的优缺点

AI作画生成器,AI作画生成是一种基于人工智能技术的艺术创作方式,其在过去几年中得到了广泛应用和迅速发展。本文将以此为题,从几个方面来探讨AI作画生成。 一.什么是AI作画生成 AI作画生成,顾名思义,指的是使用人工智…

wifi理论数据速率计算

经常看到这样的数据,下面是802.11n协议,2X2天线的理论数据速率。: 下面我们就来了解下这是怎么计算出来的。 影响因素 速率的计算需要考虑的因素包括:调制方式、码率、子载波个数(带宽和协议模式不同,子载…

RK3399平台开发系列讲解(基础篇)延迟和定时器管理

🚀返回专栏总目录 文章目录 一、标准定时器1.1、jiffy和HZ1.2、定时器API二、高精度定时器(HRT)三、动态Tick/Tickless内核四、内核中的延迟和睡眠4.1、原子上下文4.2、非原子上下文沉淀、分享、成长,让自己和他人都能有所收获!😄 📢时间是继内存之后常用的资源之一。…

细说synchronized 加锁 this 和 class 的区别

介绍 synchronized 是 Java 语言中处理并发问题的一种常用手段,它也被我们亲切的称之为“Java 内置锁”,由此可见其地位之高。然而 synchronized 却有着多种用法,当它修饰不同对象时,其意义也是不同的,下面我们一起来…

macOS Monterey 12.6.5 (21G531) Boot ISO 原版可引导镜像

本站下载的 macOS 软件包,既可以拖拽到 Applications(应用程序)下直接安装,也可以制作启动 U 盘安装,或者在虚拟机中启动安装。另外也支持在 Windows 和 Linux 中创建可引导介质。 2023 年 4 月 10 日(北京…

VIM编辑常用命令

本贴为学习小甲鱼【VIM快速入门】时的笔记,视频链接:【VIM快速入门】《带你学C带你飞》(番外篇) VIM是Linux系统下强大的编辑器,能够方便使用者提升效率。 VIM 具有 6 种基本模式和 5 种派生模式。 基本模式&#xff…