C++修炼之练气期第二层——缺省参数

简介: C++修炼之练气期第二层——缺省参数

0000000000000.png

目录


1.缺省参数的概念

2.缺省参数的分类

全缺省参数

半缺省参数

实用场景示例


正文


1.缺省参数的概念


缺省参数是声明或定义函数时为函数的参数指定一个缺省值。

在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的实参

#include <iostream>
using namespace std;
void F(int a = 0)
{
  cout << "a = " << a << endl;
}
int main()
{
  F();//未指定实参,使用参数的默认值
  F(10);//传参时,使用指定的实参
  return 0;
}


2.png


2.缺省参数的分类


全缺省参数


void F(int a = 10, int b = 20, int c = 30)
{
  cout << "a = " << a << endl;
  cout << "b = " << b << endl;
  cout << "c = " << c << endl;
  cout << endl;
}
int main()
{
  F(100);
  F(100, 200);
  F(100, 200,300);
  //传参时,必须从左往右依次给
  //错误示例:
  //F(100, ,300);
  return 0;
}

4.png


半缺省参数


void F(int a , int b , int c = 30)
{
  cout << "a = " << a << endl;
  cout << "b = " << b << endl;
  cout << "c = " << c << endl;
  cout << endl;
}
int main()
{
  F(100,200);
  F(100, 200, 300);
  return 0;
}

8.png

注意:

1. 半缺省参数必须从右往左依次来给出,不能间隔着给

//错误示例
void F(int a=10, int b, int c = 30)
{
  cout << "a = " << a << endl;
  cout << "b = " << b << endl;
  cout << "c = " << c << endl;
  cout << endl;
}

2. 缺省参数不能在函数声明和定义中同时出现

//错误示例
//test.cpp中定义
F(int a = 10);
//test.h中声明
F(int a = 20);
//编译器会报错

3. 缺省值必须是常量或者全局变量

4. C语言不支持(编译器不支持)


实用场景示例


在之前数据结构的学习中,我们经常用到某个函数给来实现对某种数据结构的初始化(以栈为例);

struct Stack
{
  int* a;
  int top;
  int capacity;
};
void StackInit(struct Stack* ps)
{
  int capacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
  ps->a = (int*)malloc(sizeof(int) * capacity);
  if (ps->a == NULL)
  {
    perror("malloc fail");
    return;
  }
  //...
}

这样的写法有一个缺点,不管我们需要多大的空间,每次调用初始化函数时第一次都只能开辟4的空间,看着很呆板。

但是运用缺省参数改进后:

void StackInit(struct Stack* ps, int defaultcapacity=4)
{
  ps->a = (int*)malloc(sizeof(int) * defaultcapacity);
  if (ps->a == NULL)
  {
    perror("malloc fail");
    return;
  }
  //...
}

当我们想指定开辟多大空间时只需要多传一个参数就可以了,否则默认为4。

当然除了这样的使用场景,缺省参数可以运用于很多很多场景,使得代码灵活性更高!

目录
相关文章
|
5月前
|
编译器 C++
C++进阶之路:何为命名空间、缺省参数与函数重载
C++进阶之路:何为命名空间、缺省参数与函数重载
37 3
|
1月前
|
自然语言处理 编译器 Linux
【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
|
3月前
|
编译器 C语言 C++
C++入门 | 命名空间、输入输出、缺省参数
C++入门 | 命名空间、输入输出、缺省参数
43 4
|
4月前
|
存储 自然语言处理 编译器
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
【C++入门 三】学习C++缺省参数 | 函数重载 | 引用
|
5月前
|
C语言 C++ 编译器
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
【C++语言】冲突-C语言:输入输出、缺省参数、引用、内联函数
|
5月前
|
编译器 C语言 C++
【C++】:C++关键字,命名空间,输入&输出,缺省参数
【C++】:C++关键字,命名空间,输入&输出,缺省参数
40 0
|
6月前
|
编译器 C语言 C++
【C++从练气到飞升】05---运算符重载(二)
【C++从练气到飞升】05---运算符重载(二)
|
6月前
|
编译器 C++
【C++从练气到飞升】05---运算符重载(一)
【C++从练气到飞升】05---运算符重载(一)
|
6月前
|
存储 编译器 C++
【C++从练气到飞升】04---拷贝构造函数
【C++从练气到飞升】04---拷贝构造函数
|
6月前
|
编译器 C++
【C++从练气到飞升】03---构造函数和析构函数
【C++从练气到飞升】03---构造函数和析构函数