默认参数

一般情况下,函数调用时实参个数应与形参相同,但为了更方便地使用函数,C++也允许定义具有默认参数的函数,这种函数调用时实参个数可以与形参不相同。“默认参数”指在定义或声明函数时为形参指定默认值(default)。这样的函数在调用时,对于默认参数,可以给出实参值,也可以不给出实参值。如果给出实参,将实参传递给形参进行调用,如果不给出实参,则按默认值进行调用。

#include<iostream>
using namespace std;
void delay(int loops=){ //延时函数,默认延时1000个时间单位
for (; loops>; loops--);
}
int main(){
delay();
cout<<"延时100个时间单位"<<endl;
delay(); //等同于delay(1000)
cout<<"延时1000个时间单位"<<endl;
return ;
}

几点注意:

  • 默认参数并不一定是常量表达式,可以是任意表达式,则函数每次被调用时该表达式被重新求值,但表达式必须有意义。例如:     int fun1(a=rand());     //调用时若省略参数a,即fun1();可由随机数发生函数当场产生,编译时确定调什么函数。
  • 默认参数还可以是全局常量、全局变量,甚至可以通过函数调用给出;但不能通过局部变量给出,因为局部变量的值在执行时才有意义。
  • 默认参数还可以有多个,但所有默认参数必须放在参数表的右侧,即先定义所有的非默认参数,再定义默认参数。例如: int sum(int a,int b=100,int c=200);这是因为在函数调用时,参数自左向右逐个匹配,当实参和形参个数不一致时只有这样才不会产生二义性。
  • 在同一个作用域中一个参数只能被指定一次默认值,不可以在声明和定义中同时指定默认值,即使默认值一样也不行。例如:     int fun2 (int, int =10, int =20); //函数原型中给出缺省值,参数名也可省略     void fun1()     {…}     int fun2(int a, int b, int c)     {…}//定义中不再给出缺省值
  • 习惯上,默认参数在公共头文件包含的函数声明中指定,否则默认实参只能用于包含该函数定义的文件中的函数调用。
  • 在不同作用域或嵌套作用域中可以重新声明默认参数,但不提倡。在嵌套作用域中声明一个名字去屏蔽在外层作用域的同一名字的声明,尤其容易出错。

内联函数

  • 当程序执行函数调用时,系统要建立栈空间,保护现场,传递参数以及控制程序执行的转移等等,这些工作需要系统时间和空间的开销。
  • 有些情况下,函数本身功能简单,代码很短,但使用频率却很高,程序频繁调用该函数所花费的时间却很多,从而使得程序执行效率降低。
  • 为了提高效率,一个解决办法就是不使用函数,直接将函数的代码嵌入到程序中。但这个办法也有缺点,一是相同代码重复书写,二是程序可读性往往没有使用函数的好。
  • 为了协调好效率和可读性之间的矛盾,C++提供了另一种方法,即定义内联函数,方法是在定义函数时用修饰词inline。

举例: 请看如下程序段,读入一行字符串,逐个判断是否为数字字符:

# include <iostream.h>
inline IsNumber(char ch) { //因使用频度很高,说明为内联函数
return ch>=′′&&ch<=′′?:;
}
void main(){
char ch;
while(ch=cin.get(ch)!= ′\n′){
if (IsNumber(ch)) cout<<″是数字字符 ″<<endl;//内联函数的调用不特殊
else cout<<″不是数字字符 ″<<endl;
}
}

我的c++学习(6)默认参数和内联函数的更多相关文章

  1. 特殊用途语言特性——默认参数、内联函数和constexptr函数

    1 默认实参 某些函数有这样一些参数,在函数的很多次调用中它们都被赋予一个相同的值,此时,我们把这个反复出现的值称为函数的默认实参.调用含有默认实参的函数时,可以包含该实参,也可以省略该实参. 我们可 ...

  2. const引用和函数占位参数遇上默认参数以及内联函数

    1.const引用: 但是加上const之后是可以的,const int &a=100;就不会报错了. 2.函数占位参数: 如果给最后的占位参数加上默认值: 3.内联函数 内联只是对编译器发起 ...

  3. C++命名空间、函数重载、缺省参数、内联函数、引用

    一 .C++入门 1.C++关键字 2.命名空间 3.C++输入&输出 4.缺省参数 5.函数重载 6.引用 7.内联函数 8.auto关键字 9.基于范围的for循环 10.指针空值null ...

  4. 【C++初学者自学笔记三】哑元函数、缺省参数、内联函数(模块二,PS:需要用到重载函数)

    一,哑元函数:一个函数的参数只有类型没有名字的则这个参数称之为哑元.类似于void fun(int); 功能:1保持向前的兼容性,比方说我们需要做成一个成品,然后成品是会不断的更新第一代第二代,当我们 ...

  5. 3.C++内联函数,默认参数,占位参数

    本章主要内容: 1)内联函数(替代宏代码段) 2)默认参数 3)占位参数 1.C++的内联函数分析 1.1讲解内联函数之前,首先回忆下之前讲的define宏定义: 之前讲过宏定义会经过预处理器进行文本 ...

  6. C++中对C的扩展学习新增语法——内联函数以及函数参数

    内联函数以及函数参数 内联函数 使用 inline 关键字必须和函数体放在一起. 内联函数具有内部链接属性. 内联函数会被编译器在编译阶段替换到函数调用的地方. 可以把内联函数定义写到头文件中,多个c ...

  7. c++-内联函数和函数重载和默认参数和函数指针

    内联函数 C++ 内联函数是通常与类一起使用.如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方. 对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编 ...

  8. 拷贝构造函数,深拷贝,大约delete和default相关业务,explicit,给定初始类,构造函数和析构函数,成员函数和内联函数,关于记忆储存,默认参数,静态功能和正常功能,const功能,朋友

     1.拷贝构造 //拷贝构造的规则,有两种方式实现初始化. //1.一个是通过在后面:a(x),b(y)的方式实现初始化. //2.另外一种初始化的方式是直接在构造方法里面实现初始化. 案比例如以 ...

  9. Python基础学习参考(三):内置函数

    一:内置函数 在第一篇文章中,我们简单的认识了一下print()函数和input()函数,也就是输入和输出,这些函数我们可以直接的调用,不要自己定义或者引入什么,对吧?想这样的函数就叫做内置函数.这里 ...

随机推荐

  1. INNODB

    INNODB,是Mysql5.7的默认存储引擎,是事务安全的,支持ACID,具有提交,回滚和crash-recovery[灾备]能力,以保护用户数据. 优势:一旦Server崩溃,Innodb会自动保 ...

  2. mysql 得到重复的记录

    select devicetoken from client_user group by devicetoken having count(devicetoken)>1

  3. grep如何忽略.svn目录,以及如何忽略多个目录

    grep如何忽略.svn目录,以及如何忽略多个目录 这是我在网上看到的文章,不过里面还有问题,我的不支持,需要更换架包 grep -r 'function_name' * (*表示当前目录下所有文件, ...

  4. Swift - 键盘弹出样式

    Swift提供了11种键盘类型: 在开发中,我们可以根据不同的需求,选择不同的键盘样式,例如,当我们只需要输入手机号码时,可以选择纯数字类型的键盘(.NumbersAndPunctuation),当我 ...

  5. Swift - enumerateObjectsUsingBlock的用法

    enumerateobjectsusingblock:不是Array的方法在NSArray使用.如果你想使用它,你需要一个实例NSArray而不是Array. import Foundation va ...

  6. route netstat -rn

    -n :不要使用通讯协定或主机名称,直接使用ip或port number; -ee:使用更详细的资讯来显示 [root@NB data]# route -nee Kernel IP routing t ...

  7. MongoDB基本命令

    1.  启动和停止MongoDB: 执行mongod命令启动MongoDB服务器.mongod有很多可配置的选项,我们通过mongod --help可以查看所有选项,这里仅介绍一些主要选项:    - ...

  8. 情定XMLA,割舍不下的XAML

    俗话说,不玩Silverlight的APP Developer,在DBA圈里就不是好的数据分析师.嗯,你没看错,题目里,一样东西是XMLA,一样东西是XAML.前者是用来玩SSAS的 ,一样是用来玩S ...

  9. GMap.Net开发之地址解析与路径查找

    上一篇介绍了如何在GMap地图上添加多边形,这篇介绍下如何使用在线的地图服务进行“地址解析”和“路径查找”. 先看地址解析,GMap中的地址解析主要用到GeocodingProvider中的如下方法: ...

  10. HDU2296 Ring(AC自动机 DP)

    dp[i][j]表示行走i步到达j的最大值,dps[i][j]表示对应的串 状态转移方程如下: dp[i][chi[j][k]] = min(dp[i - 1][j] + sum[chi[j][k]] ...