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语言中的不规范写法
posted @ 2018-12-05 19:38  PyLearn  阅读(270)  评论(0编辑  收藏  举报