一,哑元函数:一个函数的参数只有类型没有名字的则这个参数称之为哑元。类似于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:需要用到重载函数)的更多相关文章

  1. 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板

    [源码下载] 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板 作者:webabcd 介绍不可或缺 Windows Native 之 C++ ...

  2. 【C++初学者自学笔记二】函数重载(模块一)

    1.概念:同意作用域的一组参数列表不同,函数名相同的函数,这组函数叫函数重载(C语言是不能定义相同名称的函数,但是C++可以允许定义). 2作用:重载函数通常来命名一组功能相似的函数,这样做减少了函数 ...

  3. 初学者自学笔记-this的用法

    请注意:这是自学者的笔记,只是个人理解,并非技术分享,如有错误请指正. "this"的意思,简单而言,就是"这个",也就是"当前".谁调用它 ...

  4. webpack4 自学笔记三(提取公用代码)

    全部的代码及笔记都可以在我的github上查看, 欢迎star:https://github.com/Jasonwang911/webpackStudyInit/tree/master/commonT ...

  5. 【C++初学者自学笔记一】(把自己刚学到的东西做一下总结,如果有哪些地方不足请留言指正)

    这是我写的第一个博客关于C++的一些笔记,我不会写的太深奥,因为这样很多人会看不懂(我刚开始学C语言深受其害).个人觉得C++这门语言有些类似于C语言但是有些函数的用法还是有不一样的.C语言中的头文件 ...

  6. vue 自学笔记(三) 计算属性与侦听器

    一:计算属性 虽然在模板内使用表达式对属性进行处理十分便利,例如在小胡子语法里写number + 1实现对数据的简单处理,但若我们在其中加入大量的代码,使得逻辑变重,导致难以维护.例如下面的代码,并不 ...

  7. __x__(17)0906第三天__块元素block_内联元素inline_行内块元素inline-block

    1. 块元素block 独占一行的元素 一般使用块元素包含内联元素,用作页面布局 <a> 标签可以包含任何除了a标签以外的元素 <p> 标签不能包含块元素 h1... ...h ...

  8. vue 自学笔记记录

    vue 自学笔记(一): 知识内容:  安装vue ,创建vue实例,安装第一个组件,单项数据流 https://www.cnblogs.com/baili-luoyun/p/10763163.htm ...

  9. C++初阶(命名空间+缺省参数+const总结+引用总结+内联函数+auto关键字)

    命名空间 概述 在C/C++中,变量.函数和后面要学到的类都是大量存在的,这些变量.函数和类的名称将都存在于全局作用域中,可能会导致很多冲突.使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲 ...

随机推荐

  1. opencv:边缘保留滤波

    EPF滤波概述 均值与滤波的缺点:并没有考虑中心像素点对整个输出像素的贡献,实际上锚定的那个点贡献应该是最大的 高斯滤波的缺点:当边缘值梯度很大的时候,应减少中心像素点的权重,而高斯滤波没有考虑 边缘 ...

  2. python的datetime库

    datetime 库 简介 获取时间 主要提供程序计时器 基本使用

  3. Jmeter 测试结果分析之聚合报告简介

    聚合报告(aggregate report) 对于每个请求,它统计响应信息并提供请求数,平均值,最大,最小值,错误率,大约吞吐量(以请求数/秒为单位)和以kb/秒为单位的吞吐量. 吞吐量是以取样目标点 ...

  4. JEECG弹出框提交表单

    一.设备主页面(deviceMain.jsp) <t:dgToolBar title="编辑设备" icon="icon-edit" url=" ...

  5. Dart语言学习(五)Dart Bool类型

    Dart Bool类型和其他语言类似,比较简单 其特点有: 1.使用 bool 表示布尔类型 2.布尔值只有 true 和 false 3.布尔类型bool默认值是null bool isTrue = ...

  6. python 读取一个文件夹下的所jpg文件保存到txt中

    最近需要使用统计一个目录下的所有文件,使用python比较方便,就整理了一下代码. import os def gci(filepath): files = os.listdir(filepath) ...

  7. pdf .js和tableexport.js使用时遇到的2问题。

    pdf .js 问题一:报错 network.js:71 The provided value 'moz-chunked-arraybuffer' is not a valid enum value  ...

  8. 使用JavaScript获取样式的属性值

    1 . 在js中可以使用style属性来获取样式的属性值(只能获取内联样式的属性值) 语法格式为: HTML元素.style.样式属性; 2 .   在IE浏览器中,使用currentStyle来获取 ...

  9. C语言知识点记录

    1,栈底指针不变,栈顶指针变化. 2,结构化程序包括:顺序,分支,循环. 3,详细设计的任务是为软件结构图的每一个模块确定实现算法和局部数据结构. 4,数据操纵语言:负责数据的操纵,包括查询及增,删, ...

  10. Fedora以root用户自动登陆

    目录 Fedora以root用户自动登陆 参考 配置自动登陆 Fedora以root用户自动登陆 Fedora Workstation Version: 31