c++ 默认函数参数

以为是重载,其实是默认函数参数

在阅读Android源码的时候,碰到了函数调用的参数个数与函数定义时对不上的情况,一开始以为是重载,但后来发现是使用了默认函数参数。情况如下:


Bcond形参的定义个数为5个

Bcond实参在调用时只有四个

在文件中,对Bcond只有一处定义,又不是重载,那么在调用的时候到底是如何调用的呢?但在Bcond函数定义的地方找到了定义处的猫腻:


函数在定义的时候给参数rhs默认为0

如果没有传入rhs,那么默认为0

默认函数参数可以不传参

为了验证我们的猜想,在查阅资料的同时,也可以自己写案例来实验一下:

#include <iostream>

using namespace std;

class Para{
    private:
        int m_a;
        double m_b;
    public:
        Para(int a, double b, int c = 2);
};

Para::Para(int a, double b, int c) : m_a(a), m_b(b){
    cout << m_a << endl;
    cout << m_b << endl;
    cout << c << endl;
}

int main(){
    Para(1, 2.6);
    return 0;
}

Para()构造函数在定义的时候给变量c定义了默认参数为2,在调用的时候并没有给Para传递第三个参数,依然可以打印出我们想要的结果:

默认函数参数

如果我们依然给Para传递第三个参数:Para(1, 2.6, 1);,结果如下:
给默认函数传参

结果输出的是我们传递的参数。

函数的默认参数可以不止一个

函数的默认参数可以不止一个

默认参数需要注意的地方

  1. 函数的默认参数只能放在后面,像这样定义就是错误的:Para(int a, double b = 2.6, int c);
  2. 函数的默认参数只能出现一次,即不可以在定义和声明中重复出现比如:
    重复定义的错误情况
  3. 函数的默认参数可以出现在定义处,可以在声明处。

在实验中发现一个有意思的现象,可以交叉定义,但是不推荐这么用:

交叉定义

c语言不支持默认函数参数

c不支持
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容