内联函数

内联函数是指用inline关键字修饰的函数。在类内定义的函数被默认成内联函数。内联函数从源代码层看,有函数的结构,而在编译后,却不具备函数的性质

inline关键字只是给编译器一个建议,编译器不一定会接受这种建议。一些编译器,会将简单的函数做内联编译,即使它没有用inline关键字声明

C++编译器直接将函数体插入函数调用的地方

内联函数没有普通函数调用时的额外开销(压栈,跳转,返回)

inline int func(int a, int b)
{
return a < b ? a : b;
}

C++中内联编译的限制

  1. 不能存在任何形式的循环语句;
  2. 不能存在过多的条件判断语句;
  3. 函数体不能过于庞大;
  4. 不能对函数进行取址操作;(内敛编译后,内联函数将不存在)
  5. 函数内联声明必须在调用语句之前。

    如果存在以上冲突,C++编译器会忽略inline关键字

默认参数

C++支持设置默认参数,在函数调用的时候不赋值会使用默认值

void func(int x = 3)
{
printf("x:%d\n", x);
}

如果有多个参数,默认参数要放在参数列表最后面

void func(int a, int b, int x = 3, int y = 4)
{
printf("x:%d\n", x);
}

占位参数

有时候在函数定义时候,会有不确定参数

此时会有占位参数,调用的时候需要按位赋值

占位参数一般用于程序的拓展和对C代码的兼容

int func (int x, int y, int )
{
return x + y;
}

占位参数可以设置默认参数

设置默认参数以后,函数调用时候可以省略

int func2(int a, int b, int = 0)
{
return a + b;
}

函数重载

C++允许函数重载

C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,函数重载不涉及函数返回值

void myprint(int a)
{
printf("a:%d \n", a);
} void myprint(int a, char b)
{
printf("a:%d \n", a);
}

当函数重载与默认函数参数时候会产生二义性

int func(int a, int b , int c= 0)
{
printf("a:%d ", a);
return 0;
} int func(int a, int b)
{
printf("a:%d ", a);
return 0;
}

当使用func(1,2)调用函数时候,编译器会不知道如何调用,会编译失败

C++学习笔记-C++对C语言的函数拓展的更多相关文章

  1. 【学习笔记】【C语言】函数

    一. 什么是函数 任何一个C语言程序都是由一个或者多个程序段(小程序)构成的,每个程序段都有自己的功能,我们一般称这些程序段为“函数”.所以,你可以说C语言程序是由函数构成的. 比如你用C语言编写了一 ...

  2. golang学习笔记18 用go语言编写移动端sdk和app开发gomobile

    golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...

  3. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  4. MYSQL学习笔记三:日期和时间函数

    MYSQL学习笔记三:日期和时间函数 1. 获取当前日期的函数和获取当前时间的函数 /*获取当前日期的函数和获取当前时间的函数.将日期以'YYYY-MM-DD'或者'YYYYMMDD'格式返回 */ ...

  5. cips2016+学习笔记︱简述常见的语言表示模型(词嵌入、句表示、篇章表示)

    在cips2016出来之前,笔者也总结过种类繁多,类似词向量的内容,自然语言处理︱简述四大类文本分析中的"词向量"(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一 ...

  6. Haskell语言学习笔记(88)语言扩展(1)

    ExistentialQuantification {-# LANGUAGE ExistentialQuantification #-} 存在类型专用的语言扩展 Haskell语言学习笔记(73)Ex ...

  7. sqlite学习笔记7:C语言中使用sqlite之打开数据库

    数据库的基本内容前面都已经说得差点儿相同了.接下看看如何在C语言中使用sqlite. 一 接口 sqlite3_open(const char *filename, sqlite3 **ppDb) 打 ...

  8. JavaScript学习笔记(十)——高阶函数之map,reduce,filter,sort

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  9. JavaScript学习笔记(十二)——箭头函数(Arrow Function)

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

随机推荐

  1. JAVA访问Zabbix API

    Zabbix 一.Zabbix 概述 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的 ...

  2. ipvsadm命令用法

    ipvsadm命令选项 -A                         添加虚拟服务器 -E                         修改虚拟服务器 -D                 ...

  3. C#验证数字的正则表达

    说明:@符号的作用,省去转义字符\ "^\\+?[1-9][0-9]*$" 与 @"^\+?[1-9][0-9]*$"   等效 @"^(0?[1-9 ...

  4. 【Python之路】特别篇--事件驱动与异步IO

    通常,我们写服务器处理模型的程序时,有以下几种模型: (1)每收到一个请求,创建一个新的进程,来处理该请求: (2)每收到一个请求,创建一个新的线程,来处理该请求: (3)每收到一个请求,放入一个事件 ...

  5. BZOJ 4004: [JLOI2015]装备购买 高斯消元解线性基

    BZOJ严重卡精,要加 $long$  $double$ 才能过. 题意:求权和最小的极大线性无关组. 之前那个方法解的线性基都是基于二进制拆位的,这次不行,现在要求一个适用范围更广的方法. 考虑贪心 ...

  6. CDOJ 1264 人民币的构造 区间问题+数论

    人民币的构造 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status ...

  7. [BZOJ2730]:[HNOI2012]矿场搭建(塔尖)

    题目传送门 题目描述 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一个 ...

  8. 一个服务器的Apache2.4.6配置多个域名

    进入到Apache的配置文件:cd /etc/httpd/conf/http.conf 在后面添加: <VirtualHost *:80> # This first-listed virt ...

  9. Tree-based Model 如何处理categorical variable

    categorical variable 分为 order variale 和 non-order variable,其中order variable直接使用sklearn.preprocess.La ...

  10. springboot+dubbo+zookeeper+mybatis

    参考地址:https://www.cnblogs.com/gaopengfirst/p/9555240.html 首先创建一个maven项目: 再在该父项目中创建3个module,分别是:provid ...