【C++初学者自学笔记三】哑元函数、缺省参数、内联函数(模块二,PS:需要用到重载函数)
一,哑元函数:一个函数的参数只有类型没有名字的则这个参数称之为哑元。类似于void fun(int);
功能:1保持向前的兼容性,比方说我们需要做成一个成品,然后成品是会不断的更新第一代第二代,当我们改进内容的时候新用户和老用户可能会有冲突,我们这个时候就利用哑元函数来保持兼容性;
2.做函数的区分:T operator++(){}; T oprintor++(int){};
3.使表达参数列表匹配的更加严格,更容易区分重载版本;
下面这个代码就是充分验证了更严格的区分了重载函数:
namespace Yayuan{
    void fun(int a,double b){
        cout<<"fun1:"<<a<<endl;
    }
    void fun(int a,double b,int){
        cout<<"fun2:"<<a<<endl;
    }
}//两个函数的用法都是一样的,只是第二个利用了哑元函数进行区分
是吧,如果没有第二个函数最后的int系统会报错,无法区分这两个函数,而有了哑元函数就能帮我们实现函数的区分。哑原函数在我们真正处理C++问题的时候也会有实际的应用(运算符重载),运算符重载只能利用哑元来区分它了;
二,缺省参数:如果函数的形参有缺省值,当函数调用时没有传递实参时,那么形参就使用缺省值,如果调用函数时传递了实参,那么形参就使用实参的值。
注意:1.缺省参数必须靠右原则,如果一个函数有多个参数,且部分参数有缺省值那么缺省值的参数必须靠右(在编译期间确定参数),即使有多个也许堆在右边;
2.如果函数的声明和定义分开,那么缺省函数就只能写在函数声明部分,防止报错;
3.防止重载的冲突(函数调用的歧义);
4.C++中函数的规则,不接受任何参数(否则可能构成重载);
你看下面的代码编译正确,同时也证明了上面我说的注意事项:
#include<iostream>
using namespace std;
void Quesheng(short a,int b=,double c=1.0);//只能写在声明部分,写在定义部分会报错
//一个函数可以定义一个或多个缺省值
/****
void Quesheng(void){//当我使用重载的时候会发生歧义
}
****/
int main(){
Quesheng(,,);//即使有缺省值的参数也能赋值
Quesheng(,);
Quesheng();//重载歧义
getchar();
return ;
}
void Quesheng(short a,int b,double c){
cout<<a<<' '<<b<<' '<<c<<endl;
}
所以说当我们使用缺省值的时候是需要注意这几方面的内容的;
三.内联函数:函数使用inline关键字修饰的函数叫内联函数,函数调用过程:
1.调用后立即存储该存储指令的内存地址;
2.将函数参数复制到堆栈;
3.跳到标记的函数起点的内存单元执行函数代码(可能还有返回值放入到寄存器中)再将返回值弹出然后跳回到地址被保存的指令处;
内联的实质:就是把函数编译好的二进制代码替换成函数的调用指令(省去了调用开销);
其实就是利用空间来换取时间。需要注意的是:
1.类中直接定义的函数被自动的处理成内联函数,所以一般把内联函数放到头文件当中去;
2.inline是一种请求,实现方式取决于编译器,特别是当函数较大或是递归的时候;
我简单写一下形式,再做递归函数的时候定义为内联函数时是无效的,但依旧可以正常运行:
inline int Neilian(int a,int b){
         return a+b;
}
我现在也只是讲解了这几种函数的常用方法,以后学的比较深的话我还会继续更新来分别把这三个函数写成单独的博客来介绍。
【C++初学者自学笔记三】哑元函数、缺省参数、内联函数(模块二,PS:需要用到重载函数)的更多相关文章
- 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板
		
[源码下载] 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板 作者:webabcd 介绍不可或缺 Windows Native 之 C++ ...
 - 【C++初学者自学笔记二】函数重载(模块一)
		
1.概念:同意作用域的一组参数列表不同,函数名相同的函数,这组函数叫函数重载(C语言是不能定义相同名称的函数,但是C++可以允许定义). 2作用:重载函数通常来命名一组功能相似的函数,这样做减少了函数 ...
 - 初学者自学笔记-this的用法
		
请注意:这是自学者的笔记,只是个人理解,并非技术分享,如有错误请指正. "this"的意思,简单而言,就是"这个",也就是"当前".谁调用它 ...
 - webpack4 自学笔记三(提取公用代码)
		
全部的代码及笔记都可以在我的github上查看, 欢迎star:https://github.com/Jasonwang911/webpackStudyInit/tree/master/commonT ...
 - 【C++初学者自学笔记一】(把自己刚学到的东西做一下总结,如果有哪些地方不足请留言指正)
		
这是我写的第一个博客关于C++的一些笔记,我不会写的太深奥,因为这样很多人会看不懂(我刚开始学C语言深受其害).个人觉得C++这门语言有些类似于C语言但是有些函数的用法还是有不一样的.C语言中的头文件 ...
 - vue 自学笔记(三) 计算属性与侦听器
		
一:计算属性 虽然在模板内使用表达式对属性进行处理十分便利,例如在小胡子语法里写number + 1实现对数据的简单处理,但若我们在其中加入大量的代码,使得逻辑变重,导致难以维护.例如下面的代码,并不 ...
 - __x__(17)0906第三天__块元素block_内联元素inline_行内块元素inline-block
		
1. 块元素block 独占一行的元素 一般使用块元素包含内联元素,用作页面布局 <a> 标签可以包含任何除了a标签以外的元素 <p> 标签不能包含块元素 h1... ...h ...
 - vue 自学笔记记录
		
vue 自学笔记(一): 知识内容: 安装vue ,创建vue实例,安装第一个组件,单项数据流 https://www.cnblogs.com/baili-luoyun/p/10763163.htm ...
 - C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)
		
命名空间 概述 在C/C++中,变量.函数和后面要学到的类都是大量存在的,这些变量.函数和类的名称将都存在于全局作用域中,可能会导致很多冲突.使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲 ...
 
随机推荐
- AVL树的详细实现
			
[原文:https://cloud.tencent.com/developer/article/1155143] AVL树简介 AVL树的名字来源于它的发明作者G.M. Adelson-Velsky ...
 - plsql 导出oracle数据库
			
plsql 导出数据库有两个问题,一个是只导出结构,一个是导出表结构加数据这样的,首先人家让我导成sql语句 这不是简单,首先打开PLSQL 一.导出结构 1.然后tools->Export U ...
 - Vue 高德地图 路径规划 画点
			
CDN 方式 <!--引入高德地图JSAPI --> <script src="//webapi.amap.com/maps?v=1.4.13&key=您申请的ke ...
 - Django中csrf_token验证原理
			
我多年没维护的博客园,有一篇初学Django时的笔记,记录了关于django-csrftoekn使用笔记,当时几乎是照抄官网的使用示例,后来工作全是用的flask.博客园也没有维护.直到我的博客收到了 ...
 - 折纸(folding)
			
问题 C: 折纸 时间限制: 1 Sec 内存限制: 128 MB[提交] [状态] 题目描述 现有一个W*H的矩形纸张,求至少要折多少次才能使矩形纸张变成w*h的矩形纸张.注意,每次的折痕都要平行 ...
 - 其他 - 阻塞 & 同步  的基本认识
			
1. 概述 有些概念, 老是弄不清楚 同步异步 阻塞非阻塞 2. 准备 场景 角色 client 发起请求 接受请求 server 接受请求 执行操作 返回响应 行为 大致是一个 C/S 模式的模型 ...
 - 【12】(难&精)【DFS】矩阵中的路径
			
题目 矩阵中的路径 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一 ...
 - angular2 单元测试 路由相关
			
第一步:在html模板中,写路由链接,并保证有路由出口 第二步:写自定义的路由指令和路由出口组件,因为在单元测试中不需要引入真实的路由,此处我们用虚拟的代替即可. 第三步:将自定义的虚拟路由指令和路由 ...
 - 超好用的免费Redis客户端
			
Redis这款基于内存的键值对(key-vlaue)数据库,自带了一个基于命令行式的管理工具redis-cli,但是使用起来并不方便.虽然现在有了许多的图形化管理工具,有些需要收费,有些不好用.最终还 ...
 - 使用pycharm创建Django项目,'django-admin' 不是内部或外部命令
			
报错信息如下: (笔者的电脑为win10,python3.7,django 2.2.6 ) 第一种情况的解决方案:没有配置环境变量,Django安装之后,需要配置环境变量,命令django-admin ...