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

[C++]缺省参数-声明和定义歧义问题

目录

一、缺省参数概念

二、缺省参数分类

1、全缺省参数

2、半缺省参数

三、缺省参数中声明和定义歧义问题

情况一:在函数声明和定义分离时,如果都使用缺省参数,则执行时会报错。

情况二:在函数声明和定义分离时,函数声明不指定缺省参数,定义指定缺省参数,则执行也会报错。


一、缺省参数概念

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

二、缺省参数分类

1、全缺省参数

void func(int a = 10, int b = 20, int c = 30)
{cout << "a=" << a << endl;cout << "b=" << b << endl;cout << "c=" << c << endl;
}
int main()
{func();func(1);func(1, 2);func(1, 2, 3);
}

2、半缺省参数

//半缺省必须从右往左连续设置
void func(int a , int b = 20, int c = 30)
{cout << "a=" << a << endl;cout << "b=" << b << endl;cout << "c=" << c << endl;
}
int main()
{func(1);func(1, 2);func(1, 2, 3);
}

三、缺省参数中声明和定义歧义问题

情况一:在函数声明和定义分离时,如果都使用缺省参数,则执行时会报错。

以下面代码为例:

声明和定义同时使用缺省参数,执行会出错
原因:声明和定义同时使用缺省参数,可能会出现缺省参数不一致的情况,比如Stack.h中void InitStack(Stack* pst, int stackCapacity =40);
Stack.cpp中void InitStack(Stack* pst, int stackCapacity =100);
这种情况执行时会出现歧义,不知道使用哪个缺省参数,因此声明和定义同时使用缺省参数,会执行出错。

情况二:在函数声明和定义分离时,函数声明不指定缺省参数,定义指定缺省参数,则执行也会报错。

函数声明不指定缺省参数,定义指定缺省参数

原因:程序在执行的预处理阶段展开头文件,test.cpp中包含了Satck.h头文件,将Satck.h中的内容展开,得到void InitStack(Stack* pst, int stackCapacity);的声明,但是test.cpp中InitSatck(&st)只有一个参数,从而会在编译阶段报错,因此语法规定缺省参数在声明中,而不在定义中。

正确代码

http://www.dtcms.com/a/585918.html

相关文章:

  • 做美食教程的网站有哪些软件商店app
  • mysql提权方式-UDF提权、MOF提权
  • 快站是个什么平台三只松鼠有趣的软文
  • Xilinx FPGA怎么使用LUTRAM
  • 漫谈 Java 轻量级的模板技术:从字符串替换到复杂模板
  • 免费网站空间有哪些mdx wordpress
  • 第九章 生成树
  • UniApp 全局使用字体教程
  • 404网站怎么做网站开发费用明细
  • python爬虫学习笔记
  • 【算法】递归算法实战:汉诺塔问题详解与代码实现
  • js 网站首页下拉广告南宁市网站开发建设
  • SolarEdge和英飞凌合作开发人工智能数据中心
  • asp.net core webapi------3.AutoMapper的使用
  • CCF LMCC人工智能大模型认证 青少年组 第一轮样题
  • 百度搜索不到asp做的网站全球知名购物网站有哪些
  • Android Studio 中 Gradle 同步慢 / 失败:清理、配置全攻略
  • Makefile极简指南
  • 信息系统项目管理师--论文case
  • win7 iis网站无法显示该页面网站上线准备
  • 华为防火墙基础功能详解:构建网络安全的基石
  • 北京网站定制设计开发公司宁波专业定制网站建设
  • 网站的后台怎么做调查问卷设计之家广告设计
  • WebRtc语音通话前置铃声处理
  • 使用XSHELL远程操作数据库
  • 淘宝客网站域名宜昌做网站哪家最便宜
  • 微信小程序中使用 MQTT 实现实时通信:技术难点与实践指南
  • Java computeIfAbsent() 方法详解
  • 做网站市场报价免费企业网站开源系统
  • 天元建设集团有限公司企业代码东莞做网站seo