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

news/2024/7/3 10:20:45

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++ 函数的默认参数


http://www.niftyadmin.cn/n/1339337.html

相关文章

期权有哪些坑,你知道吗?

本文为纯原创文章,应朋友邀请而编写。文章花费了笔者大量的精力投入。琢磨着如何行文&#xff0c;怎么样通俗点&#xff0c;提炼出有用的观点来&#xff0c;放在标题中。目标的解决广大求职者的最关心的问题。 转载请注明来源地址。 一、概念理解篇 1、理解A股、B股、C股等 2、…

Django 过滤器 实例

实例&#xff11; safe让Html标签以及一些特殊符号&#xff08;如<&#xff09;生效&#xff0c;下面以例子说明&#xff1a; # value <b>CPT</b># 那么输出的时候&#xff0c;CPT就是加粗的&#xff0c;如果不加safe那么显示出来的就是纯文本<b>CPT<…

requestAnimationFrame,Web中写动画的另一种选择

HTML5/CSS3时代&#xff0c;我们要在web里做动画选择其实已经很多了: 你可以用CSS3的animattionkeyframes; 你也可以用css3的transition; 你还可以用通过在canvas上作图来实现动画&#xff0c;也可以借助jQuery动画相关的API方便地实现; 当然最原始的你还可以使用window.setTim…

C++ 、、 |、|| 、|=、?: 逻辑运算符用法

C &、&& |、|| 与|逻辑运算符用法&与&&|与|||?:参考链接&与&& &&     表示逻辑与的意思&#xff0c;即为and。当运算符两边的表达式的结果都为true时&#xff0c;整个运算结果才为true&#xff0c;否则&#xff0c;只要有一…

麦进斗:magento如何安装子主题

让我们的孩子创造一个主题&#xff0c;我们所有的自定义主题在Magento 2去这里&#xff1a;应用程序/设计/开发/ company_name / theme_name让我们假设&#xff0c;我们公司的名称是公司和我们的主题名称是基本。我们需要创建以下主题目录结构&#xff1a;<app><desig…

C++ Vector容器的push_back( )与pop_back( )函数

C Vector容器的push_back&#xff08;&#xff09;与pop_back&#xff08;&#xff09;函数push_back( )pop_back( )参考链接push_back( ) 函数将一个新的元素加到vector的最后面&#xff0c;位置为当前最后一个元素的下一个元素 push_back() 在Vector最后添加一个元素&#x…

高性能、高流量Java Web站点打造的22条建议

http://www.csdn.net/article/2013-12-20/2817861-22-recommendations-for-building-effective-high-traffic-web-application/2从2005年-2013年&#xff0c;Ashwanth Fernando曾供职于Best Buy、Pearson VUE、Walgreens、Walmart eCommerce等多家知名公司&#xff0c;现在Appl…

Nvidia Video Codec SDK——AppDec解析

Nvidia Video Codec SDK——AppDec解析项目框架AppDec硬解码整体框架主函数main具体硬解码流程函数DecodeMediaFile初始化解码器实际解码函数Decode回调函数HandlePictureDisplay数据指针参考链接项目框架 使用的SDK版本是Video_Codec_SDK_8.2.16&#xff0c;下载链接&#xf…