C++函数默认参数

  • 定义
  • 参数添加顺序
  • 注意事项
  • 转载链接

定义

    在C++中,定义函数时可以给形参指定一个默认的值,这样调用函数时如果没有给这个形参赋值(没有对应的实参),那么就使用这个默认的值。也就是说,调用函数时可以省略有默认值的参数。如果用户指定了参数的值,那么就使用用户指定的值,否则使用参数的默认值。
所谓默认参数,指的是当函数调用中省略了实参时自动使用的一个值,这个值就是给形参指定的默认值。下面是一个简单的示例:

#include<iostream>
using namespace std;
//带默认参数的函数
void func(int n, float b=1.2, char c='@'){cout<<n<<", "<<b<<", "<<c<<endl;
}
int main(){//为所有参数传值func(10, 3.5, '#');//为n、b传值,相当于调用func(20, 9.8, '@')func(20, 9.8);//只为n传值,相当于调用func(30, 1.2, '@')func(30);return 0;
}

运行结果:

10, 3.5, #
20, 9.8, @
30, 1.2, @

参数添加顺序

对于带参数列表的函数,必须从右向左添加默认值。也就是说,要为某个参数设置默认值,则必须为它的右边的所有参数提供默认值:

int function1(int n,int m = 4,int j = 5);     //有效
int function2(int n,int m = 6,int j);    //无效
int function3(int k = 1,int m = 2,int n = 3);    //有效

例如,function1( )原型允许调用该函数时提供1个、2个或3个参数:

beeps = function1(2);//即function1(2,4,5)
beeps = function1(1,8);//即function1(1,8,5)
beeps = function1(8,7,6);//即function1(8,7,6)没有使用默认参数

实参按从左到右的顺序依次被赋给相应的形参,而不能跳过任何参数。因此,下面的调用是不允许的:

beeps = function1(3,,8)//无效

注意事项

    这种默认参数的情况会带来有些便利。(比如初始化一个商品对象,在99%的情况在都是正常的,那么这个商品是否正常的标记就可以默认为1,特殊的1%情况,再加上)。但是有以下三个要注意的情况:
1.默认参数只能放在函数声明处或者定义处,能放在声明处就放在声明处 。
    a. 大部分情况,别人调用你的代码只能看到函数声明,如果你写在定义处,别人根本不知道你的默认参数是什么。
    b.如果你是在定义处写的默认参数,那么你在使用该函数前就需要把函数定义放在前面。不然编译阶段通过无默认参数的函数声明无法确定这个函数是带默认参数的。
所以,默认参数写在声明处。
2.如果某个参数是默认参数,那么它后面的参数必须都是默认参数
    因为非默认参数的参数必须要给出具体值,而调用函数传递参数的时候是从左到右的,所以非默认参数前面的都必须要传值进来。
那么默认参数后面的当然也得都为默认参数。
3.不要重载一个带默认参数的函数

class Test
{public:int func(int a){return a;}int func(int a, int b = 1){return a + b;}
} ;

你调用func(1)的时候,谁知道你想调用哪一个。

转载链接

C++函数默认参数
C++函数的默认参数详解
c++ 函数的默认参数

C++函数默认参数(函数传入实参个数比形参个数少)相关推荐

  1. 函数 函数的基本使用 函数的四种基本形式 可选参数 函数默认参数 函数的剩余参数 构造函数() 函数重(chong)载

    函数主要定义行为的 匿名参数 const mingz = function  无名字(参数:数值类型):返回值的类型 接口函数: type(关键字)  别名 = (参数:number)=>返回值 ...

  2. Python进阶-函数默认参数,特别是参数传递为空列表

    这两天遇到函数默认参数的bug,在互联网上好好总结了一下: 如非特别说明,下文均基于Python3 一.默认参数 python为了简化函数的调用,提供了默认参数机制: def pow(x, n = 2 ...

  3. python可变类型与不可变类型作为函数参数区别_不要用可变类型对象做函数默认参数...

    不要用可变类型对象做函数默认参数 1. 可变对象做默认参数 内置数据类型int,float,bool,str,tuple 是不可变对象, 字典,集合,列表是可变对象. 在定义python函数时,千万不 ...

  4. 软件测试学习 之 Python 函数默认参数

    转载说明 作者:珞樱缤纷 出处:博客园 博文:Python进阶-函数默认参数 Python进阶-函数默认参数 写在前面 如非特别说明,下文均基于Python3 一.默认参数 python为了简化函数的 ...

  5. python 函数 默认参数

    python 函数 默认参数 def add(a=1, b=2): # a,b设置默认参数c = a + breturn c c = add(a=2) # 如果不填,就是默认参数 print(c) 4

  6. Python函数默认参数陷阱

    阅读目录 可变对象与不可变对象 函数默认参数陷阱 默认参数原理 避免 修饰器方法 扩展 参考 请看如下一段程序: def extend_list(v, li=[]): li.append(v) ret ...

  7. C++ 函数默认参数和占位参数

    函数默认值 函数的默认参数从左向右,如果一个参数设置了默认参数,那么这个参数之后的参数都必须设置默认参数. 如果函数声明和函数定义分开写,函数声明和函数定义不能同时设置默认参数. c++在声明函数时, ...

  8. 【清华大学-郑莉教授】C++语言程序设计 函数的参数函数的内联、重载和系统函数的调用

    [清华大学-郑莉教授]C++语言程序设计 函数的参数&&函数的内联.重载和系统函数的调用 函数的参数 交换算法 输入两个整数并交换 函数的内联.重载和系统函数的调用 内联函数 函数的重 ...

  9. 【C++】引用、内联函数、函数重载、函数默认参数(缺省参数)与占位参数、extern “C“ 浅析

    端午继续~         C++对C的扩展 目录 引用 普通变量名引用 对数组的引用 对指针的引用 对函数的引用 引用作为函数的参数 引用作为函数的返回类型 常引用 内联函数 函数重载 函数的默认参 ...

最新文章

  1. 推荐一款超牛逼的Web SSH 客户端工具
  2. 美国韩国科学家纷纷开发出电子机器人“皮肤”,据称具有比人类更好的触觉...
  3. Docker registry V2
  4. python mysql数据库长连接_python 长连接 mysql数据库
  5. Tomcat启动时加载本地证书出错的问题
  6. LwIP应用开发笔记之五:LwIP无操作系统TCP服务器
  7. ai端到端_如何使用行为树构建端到端的对话式AI系统
  8. 软件测试安全性翻译成英语,中文翻译英语测试题-请大家帮我翻译一段关于软件测试的英文(译成中文)#8226; 爱问知识人...
  9. 利用vs10和opencv识别图片类型身份证的号码
  10. SQLserver C#将图片以二进制方式存储到数据库,再从数据库读出图片
  11. kotlin官方文档中文翻译(二) 基础内容
  12. 【项目】STC15W408AS--烧写、数码管、按键、串口通信、ADC
  13. 显示器测试软件贴吧,卡硬工具箱怎么检测显示器 屏幕坏点查看教程
  14. python编程入门自学
  15. 【Django】Django视图views详解
  16. Simulink方波脉冲产生模块Pulse Generator详解
  17. 80C51单片机的四组IO口
  18. 利用纯CSS实现条纹背景
  19. LeetCode 09:回文数(Java实现)
  20. 我所经历的汶川大地震之四

热门文章

  1. ORACLE-023:令人烦恼的 ora-01722 无效数字
  2. BUUCTF-web极客大挑战
  3. 往届学生软件工程作业参考-需求分析
  4. python小练习--GUI基础
  5. iphone内存管理(二)
  6. 论文中稿 IEEE ACCESS 期刊
  7. Jenkins 企业微信消息通知
  8. css通知页面,CSS3 transition 实现通知消息轮播条
  9. makefile和make
  10. SM 2256K AB 无缓存量产工具