C++解析(6):函数参数的扩展
0.目录
1.函数参数的默认值
2.函数默认参数的规则
3.函数占位参数
4.小结
1.函数参数的默认值
- C++可以在函数声明时为参数提供一个默认值
- 当函数调用时没有提供参数的值,则使用默认值

参数的默认值必须在函数声明中指定:

运行以下程序:
#include <stdio.h>
int mul(int x = 0);
int main()
{
printf("%d\n", mul());
printf("%d\n", mul(-1));
printf("%d\n", mul(2));
return 0;
}
int mul(int x)
{
return x * x;
}
运行结果如下:
[root@bogon Desktop]# g++ test.cpp
[root@bogon Desktop]# ./a.out
0
1
4
以下这两种情况都会报错:
(我们在定义函数默认参数值的时候只需要在声明的时候给出,在定义的时候不给出,这样是符合语法的。如果在声明时不给出,只在定义时给出,也会报错。)
#include <stdio.h>
int mul(int x = 0);
int main()
{
printf("%d\n", mul());
printf("%d\n", mul(-1));
printf("%d\n", mul(2));
return 0;
}
int mul(int x = 5)
{
return x * x;
}
#include <stdio.h>
int mul(int x);
int main()
{
printf("%d\n", mul());
printf("%d\n", mul(-1));
printf("%d\n", mul(2));
return 0;
}
int mul(int x = 5)
{
return x * x;
}
2.函数默认参数的规则
- 参数的默认值必须从右向左提供
- 函数调用时使用了默认值,则后续参数必须使用默认值

3.函数占位参数
在C++中可以为函数提供占位参数:
- 占位参数只有参数类型声明,而没有参数名声明
- 一般情况下,在函数体内部无法使用占位参数

函数占位参数的意义:
- 占位参数与默认参数结合起来使用
- 兼容C语言程序中可能出现的不规范写法
下面的两种声明方式等价吗?
void func(); <——> void func(void);
回答:在C语言中是不等价的,在C++中是等价的!
通过占位参数与默认参数的结合使用,就可以兼容C语言中的不规范的的写法,并且能够编译通过了。
#include <stdio.h>
void func(int = 0, int = 0){}
int main()
{
func();
func(1, 2);
return 0;
}
4.小结
- C++中支持函数参数的默认值
- 如果函数调用时没有提供参数值,则使用默认值
- 参数的默认值必须从右向左提供
- 函数调用时使用了默认值,则后续参数必须使用默认值
- C++中支持占位参数,用于兼容C语言中的不规范写法
C++解析(6):函数参数的扩展的更多相关文章
- C++中函数参数的扩展
1,C++ 可以看成是一种更好的 C 语言,所以 C++ 会考虑 C 的欠缺部分,然后给 与一些补充和扩展,本节课讲述 C++ 对函数参数的非常重要的扩展: 2,函数参数的默认值: 1,C++ 中可 ...
- ES6之函数参数
ES6中对于函数参数主要增加了以下内容: 1.参数的扩展/数组的展开: 2.默认参数. 什么是参数的扩展? 看下面代码: <!DOCTYPE html> <html lang=&qu ...
- javascript . 03 函数定义、函数参数(形参、实参)、函数的返回值、冒泡函数、函数的加载、局部变量与全局变量、隐式全局变量、JS预解析、是否是质数、斐波那契数列
1.1 知识点 函数:就是可以重复执行的代码块 2. 组成:参数,功能,返回值 为什么要用函数,因为一部分代码使用次数会很多,所以封装起来, 需要的时候调用 函数不调用,自己不会执行 同名函数会覆盖 ...
- 函数parseQuery用于解析url查询参数
在百度上找的,以后忘了再看. 语法如下: var obj = parseQuery(query) query是被解析的查询参数,函数返回解析后的对象. 使用范例如下: var jerry = pars ...
- Python虚拟机函数机制之扩展位置参数和扩展键参数(六)
扩展位置参数和扩展键参数 在Python虚拟机函数机制之参数类别(三)的例3和例4中,我们看到了使用扩展位置参数和扩展键参数时指示参数个数的变量的值.在那里,我们发现在函数内部没有使用局部变量时,co ...
- C++中对C的扩展学习新增语法——内联函数以及函数参数
内联函数以及函数参数 内联函数 使用 inline 关键字必须和函数体放在一起. 内联函数具有内部链接属性. 内联函数会被编译器在编译阶段替换到函数调用的地方. 可以把内联函数定义写到头文件中,多个c ...
- main函数参数解析
int argc,char *argv agrc表示参数的个数 argv储存参数 这个函数的意思是逐一输出参数 实际上,main函数也可以带参数.带参数main函数的定义格式如下:void main( ...
- ES6 - 函数扩展(函数参数默认值)
函数参数默认值 ES6 之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; console.log(x, y); ...
- JavaScipt 源码解析 回调函数
函数是第一类对象,这是javascript中的一个重要的概念,意味着函数可以像对象一样按照第一类管理被使用,所以在javascript中的函数: 能"存储"在变量中,能作为函数的实 ...
随机推荐
- 【BZOJ4008】[HNOI2015]亚瑟王
[BZOJ4008][HNOI2015]亚瑟王 题面 bzoj 洛谷 题解 由期望的线性性 可以知道,把所有牌打出的概率乘上它的伤害加起来就是答案 记第$i$张牌打出的概率为$fp[i]$ 则 $$ ...
- (EX)CRT总结
(EX)CRT总结 这个东西是联赛的时候搞的,早就忘了,写篇博客复习一下 中国剩余定理(crt) 给定\(a\).\(m\) \[ x\equiv a_1(mod\;m_1)\\ x\equiv a_ ...
- 【JUC源码解析】ConcurrentLinkedQueue
简介 ConcurrentLinkedQueue是一个基于链表结点的无界线程安全队列. 概述 队列顺序,为FIFO(first-in-first-out):队首元素,是当前排队时间最长的:队尾元素,当 ...
- 【RAC搭建报错】libcap.so.1:cannot open shared object file
原文参考:http://blog.csdn.net/siyanyanyanyai/article/details/45306595 http://orax.blog.sohu.com/26207226 ...
- 中国天气网 城市代码 sql语句
mysql的 下载地址:http://download.csdn.net/detail/songzhengdong82/6252651
- Python教程 深入条件控制
while 和 if 条件句中可以使用任意操作,而不仅仅是比较操作. 比较操作符 in 和 not in 校验一个值是否在(或不在)一个序列里.操作符 is 和 is not 比较两个对象是不是同一个 ...
- dalao自动报表邮件2.0
经过昨天的修改优化后,dalao收到了不是“木马”的邮件,欣慰地点了点头,“不错,不错,这几张表设计的简洁明了,看着有货!不过呀,,,这些表的数据太多了一点,十几天的数据一大溜,能不能再简洁一点,做一 ...
- [kuangbin带你飞]专题一 简单搜索 回顾总结
第二题:bfs,忘了将queue清空. 第三题:bfs,记得使用vis数组,防止重复入队
- 【C#】人脸识别 视频数据转图片数据
使用虹软人脸识别的开发过程中遇到了转换的问题 因为不会用C#直接打开摄像头,就只能用第三方dll.一开始用Aforge,后来发现有个问题,关闭摄像头老是陷入等待,所以抛弃了.前一阵子开始用封装了Ope ...
- Python坑系列:可变对象与不可变对象
在之前的文章 http://www.cnblogs.com/bitpeng/p/4748148.html 中,大家看到了ret.append(path) 和ret.append(path[:])的巨大 ...