【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++中,变量.函数和后面要学到的类都是大量存在的,这些变量.函数和类的名称将都存在于全局作用域中,可能会导致很多冲突.使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲 ...
随机推荐
- auto_prt的VS版本源码剖析
通过对VC版本的auto_ptr的源代码得知VC版本还有一点小缺陷,又对VS版本的auto_ptr做了一些剖析,具体代码和注释如下: //假设全局pa2都是用pa1来构造 //如:pa2(pa1).p ...
- Bugku-CTF之login3(SKCTF)(基于布尔的SQL盲注)
Day41 login3(SKCTF)
- 清理rancher、k8s环境
清理rancher.k8s环境 待办 https://blog.csdn.net/CSDN_duomaomao/article/details/77684571
- 转载:AAC文件解析及解码
转自:http://blog.csdn.net/wlsfling/article/details/5876016 http://www.cnblogs.com/gaozehua/archive/201 ...
- Windows设置Tomcat的管理员的用户和密码
我们首先打开Tomcat的配置文件,具体如下:(conf目录下的tomcat-users.xml) 删除原有的<tomcat-users>,加入如下代码 <tomcat-users& ...
- dist-packages vs site-packages
dist-packages 和 site-packages的区别 Reference: https://stackoverflow.com/questions/9387928/whats-the-di ...
- Bugku-CTF加密篇之+[]- (+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.< ++++[ ->.........)
+[]- +++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.< ...
- JAVA(5)之关于main函数的默认放置位置
Eclipse默认主程序入口 Public class 的main函数 package com.study; public class Test { public static void main(S ...
- 解决<%@taglib prefix="s" uri="/struts-tags"%>显示找不到
问题: jsp中使用<%@taglib prefix="s" uri="/struts-tags"%>显示找不到 解决方法: 在web.xml中插入 ...
- 【PAT甲级】1091 Acute Stroke (30 分)(BFS)
题意: 输入四个正整数M,N,K,T(K<=60,M<=1286,N<=128),代表每片的高度和宽度,片数和最小联通块大小.输出一共有多少个单元满足所在联通块大小大于等于T. tr ...