服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++的缺省参数你了解嘛

C++的缺省参数你了解嘛

2022-08-15 09:59跳动的bit C/C++

这篇文章主要为大家介绍了C++缺省参数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

一、缺省参数概念

缺省参数是声明或定义函数时为函数的参数指定一个默认值。在调用该函数时,如果没有指定实参则采用该默认值,否则使用指定的实参

?
1
2
3
4
5
6
7
8
9
10
11
12
#include<iostream>
using namespace std;
void TestFunc(int a = 0)//参数缺省值
{
    cout << a << endl;
}
int main()
{
    TestFunc();//没有指定实参,使用缺省值
    TestFunc(10);//指定实参,使用实参
    return 0;
}

有什么用 

比如在 C 语言中有个很苦恼的问题是写栈时,不知道要开多大的空间,之前我们是如果栈为空就先开 4 块空间,之后再以 2 倍走,如果我们明确知道要很大的空间,那么这样就只能一点一点的接近这块空间,就太 low 了。但如果我们使用缺省,明确知道不需要太大时就使用默认的空间大小,明确知道要很大时再传参

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include<iostream>
using namespace std;
namespace WD
{
    struct Stack
    {
        int* a;
        int size;
        int capacity;  
    };
}
using namespace WD;
void StackInit(struct Stack* ps)
{
    ps->a = NULL;
    ps->capacity = 0;
    ps->size = 0;
}
void StackPush(struct Stack* ps, int x)
{
    if(ps->size == ps->capacity)
    {
        //ps->capacity *= 2;//err
        ps->capacity == 0 ? 4 : ps->capacity * 2;//这里就必须写一个三目
    }
}
void StackInitCpp1(struct Stack* ps, int defaultCP)
{
    ps->a = (int*)malloc(sizeof(int) * defaultCP);
    ps->capacity = 0;
    ps->size = defaultCP;
}
void StackInitCpp2(struct Stack* ps, int defaultCP = 4)//ok
{
    ps->a = (int*)malloc(sizeof(int) * defaultCP);
    ps->capacity = 0;
    ps->size = defaultCP;
}
int main()
{
    //假设明确知道这里至少需要100个数据到st1
    struct Stack st1;
    StackInitCpp1(&st1, 100);
    //假设不知道st2里需要多少个数据 ———— 希望开小点
    struct Stack st2; 
    StackInitCpp2(&st1);//缺省
    return 0;
}

二、缺省参数分类

全缺省参数 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void TestFunc(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()
{
    //非常灵活,
    TestFunc();
    TestFunc(1);
    TestFunc(1, 2);
    TestFunc(1, 2, 3); 
    //TestFunc(1, , 3);//err,注意它没办法实现b不传,只传a和b,也就是说编译器只能按照顺序传
    return 0;
}

注意:

全缺省参数只支持顺序传参

半缺省参数 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//void TestFunc(int a, int b = 10, /*int f, - err*/ int c = 20);//err,void TestFunc(int a, int b = 10, /*int f, int x = y, -> err*/ int c = 20){cout << "a = " << a << endl;cout << "b = " << b << endl;cout << "c = " << c << endl;cout << endl;}int main(){//TestFunc();//err,至少得传一个,这是根据形参有几个非半缺省参数确定的TestFunc(1);TestFunc(1, 2);TestFunc(1, 2, 3);return 0;}//void TestFunc(int a, int b = 10, /*int f, - err*/ int c = 20);//err,
void TestFunc(int a, int b = 10, /*int f, int x = y, -> err*/ int c = 20)
{
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;
    cout << endl;
}
int main()
{
    //TestFunc();//err,至少得传一个,这是根据形参有几个非半缺省参数确定的
    TestFunc(1);
    TestFunc(1, 2);
    TestFunc(1, 2, 3); 
    return 0;
}
?
1
//a.hvoid TestFunc(int a = 10);//a.cppvoid TestFunc(int a = 20){}

注意:

  • 半缺省参数必须从右往左依次来给出,且不能间隔着给
  • 缺省参数不能在函数声明和定义中同时出现
  • 缺省值必须是常量或者全局变量
  • C 语言不支持缺省

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容! 

原文链接:https://blog.csdn.net/wh128341/article/details/122390474

延伸 · 阅读

精彩推荐
  • C/C++C++控制台实现密码管理系统

    C++控制台实现密码管理系统

    这篇文章主要为大家详细介绍了C++控制台实现密码管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    keivin20068822021-10-07
  • C/C++C++形参与实参的区别实例解析

    C++形参与实参的区别实例解析

    这篇文章主要介绍了C++形参与实参的区别实例解析,需要的朋友可以参考下...

    C++教程网9902021-01-23
  • C/C++详解Dev C++使用教程(使用Dev C++编写C语言程序)

    详解Dev C++使用教程(使用Dev C++编写C语言程序)

    这篇文章主要介绍了详解Dev C++使用教程(使用Dev C++编写C语言程序),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    C语言中文网6342021-10-27
  • C/C++C语言实现中缀表达式转换为后缀表达式

    C语言实现中缀表达式转换为后缀表达式

    这篇文章主要为大家详细介绍了C语言实现中缀表达式转换为后缀表达式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考...

    苍之羽4372021-09-02
  • C/C++C++实现数字雨效果

    C++实现数字雨效果

    这篇文章主要为大家详细介绍了C++实现数字雨效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    林梵7872021-09-24
  • C/C++C++中头文件和源文件详细介绍

    C++中头文件和源文件详细介绍

    这篇文章主要介绍了C++中头文件和源文件详细介绍的相关资料,需要的朋友可以参考下...

    DoubleLi5272021-05-03
  • C/C++C++求逆序对的方法

    C++求逆序对的方法

    这篇文章主要介绍了C++求逆序对的方法,包含了字符串常见的操作方法,是非常实用的技巧,需要的朋友可以参考下...

    C++教程网12132021-02-03
  • C/C++详解C语言#define预处理宏定义

    详解C语言#define预处理宏定义

    本文主要介绍了C语言#define预处理宏定义,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    vbnetcx5122021-12-27