【是C++,不是C艹】 省缺参数 | 函数重载 | 内联函数 上

简介: 省缺参数 | 函数重载 | 内联函数

前言


上期,我带大家给C++打了招呼,捎带着认识了命名空间和输入输出,那么这期带大家继续学习C++,让我们开始吧!

注:

你最好是学完了C语言,并学过一些初阶的数据结构。


目录


Part1:省缺参数

1.一个引子

2.概念

3.分类

4.注意

Part2:函数重载

1.一个引子

2.概念

3.不支持函数重载

Part3:内联函数

1.概念

2.特性


正文


Part1:省缺参数


1.一个引子


我把这段代码抛给你:

#include<iostream>
using namespace std;
void Func(int a)
{
  cout << a << endl;
}
int main()
{
  Func(3);
  return 0;
}


挺平平无奇的,是吧?

👁️‍🗨️输出结果:3


那如果我手贱,调用时没传参数呢?

#include<iostream>
using namespace std;
void Func(int a)
{
  cout << a << endl;
}
int main()
{
  Func(); // 这里没传参数
  return 0;
}


活生生的报错: 

6dff441f89339dcaf313a03ba172bdcf_6a49ff62b4634b3390caa95ff194b97a.png

报错原因:没有传递参数


但是,但是,

C++可以这样玩:

#include<iostream>
using namespace std;
void Func(int a = 114514) // 这里变了哈
{
  cout << a << endl;
}
int main()
{
  Func(); // 同样没有传参
  return 0;
}


👁️‍🗨️输出结果:114514


这就是“省缺参数”,接下来就让我带你学它!!!


2.概念


准确地说,什么是省缺参数呢?

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

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


简单说:你传了就用你的,不传也没关系,我用自己的

在引入当中的例子就可以很好地解读省缺参数的基本概念:

#include<iostream>
using namespace std;
void Func(int a = 114514) // 指定省缺值
{
  cout << a << endl;
}
int main()
{
  Func(3); // 指定实参,使用实参
  Func();  // 不指定实参,使用省缺值
  return 0;
}


👁️‍🗨️输出结果:3

                      114514


3.分类


省缺参数分两类:全省缺参数半省缺参数

• 全省缺参数:函数的参数指定了省缺值;

• 半省缺参数:函数的参数部分指定了省缺值。

接下来分别讲解:


全省缺参数:

🚨注意:一定是全部的参数都要给省缺值

代码演示:

#include<iostream>
using namespace std;
void Func(int a = 1,int b = 2,int c = 3 ) // 都给了哈
{
  cout << a << ' ';
  cout << b << ' ';
  cout << c << endl;
}
int main()
{
  Func();           // 不传参
  Func(10);         // 传第一个参
  Func(10, 20);     // 传第一,第二个参
  Func(10, 20, 30); // 全传参,不采用省缺值
  return 0;
}


👁️‍🗨️输出结果:

5af9ccdc27fc6367d1471459b6e2b475_369b2c54c1954da9a368a1070fec7c8d.png

🪄解释:

第一次调用:没有传参,都使用省缺参数;

第二次调用:传递了10,这个给了a,其余默认;

第三次调用:传递了10,20,依次给了a,b,c默认;

第四次调用:全传递,不采用省缺值。


好奇心大发,我值传给c行不行?

Func(, , 30);     // 试图传给c


54339452e9d4067082a18ab3d6b79275_3be049d1f7db468884cc9f6392458273.png

🈲看这爆红你就知道行不行了。

为甚?

参数默认是从左往右传递的啊,语法就这样规定的,不行你就给本贾尼打个电话👻


半省缺参数:

半省缺参数可不能理解成一半... ...

它指的是部分省缺。


🌰例子:

void Func(int a, int b = 2, int c = 3) // 给b和c默认值
{
  cout << a << ' ';
  cout << b << ' ';
  cout << c << endl;
}


void Func(int a, int b, int c = 3) // 给c默认值
{
  cout << a << ' ';
  cout << b << ' ';
  cout << c << endl;
}

“我故意保留了一部分省缺,这样才能让你知道这是半省缺!!!”😝

那我这样给省缺行不行?

ddf6f91dec68c7a273f9a60e69823fc4_01e5bef2c2814f26acdcda838d9695e1.png

🈲你说行不行?爆红是爆给谁看的?

🚨记住:

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


4.注意


这里就总结一下在使用省缺参数中要注意的点:

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

• 缺省参数不能函数声明和定义同时出现;

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

C语言不支持(编译器不支持)。


目录
相关文章
|
2月前
|
安全 编译器 C++
【C++11】可变模板参数详解
本文详细介绍了C++11引入的可变模板参数,这是一种允许模板接受任意数量和类型参数的强大工具。文章从基本概念入手,讲解了可变模板参数的语法、参数包的展开方法,以及如何结合递归调用、折叠表达式等技术实现高效编程。通过具体示例,如打印任意数量参数、类型安全的`printf`替代方案等,展示了其在实际开发中的应用。最后,文章讨论了性能优化策略和常见问题,帮助读者更好地理解和使用这一高级C++特性。
64 4
|
3月前
|
程序员 C++
C++中的函数重载有什么作用
【10月更文挑战第19天】C++中的函数重载有什么作用
30 3
|
3月前
|
算法 编译器 C++
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
【C++篇】领略模板编程的进阶之美:参数巧思与编译的智慧
99 2
|
3月前
|
存储 安全 编译器
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(一)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
3月前
|
编译器 程序员 C++
C++中的函数重载是什么
【10月更文挑战第19天】C++中的函数重载是什么
43 0
|
3月前
|
存储 编译器 程序员
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值(二)
【C++】C++特性揭秘:引用与内联函数 | auto关键字与for循环 | 指针空值
|
3月前
|
自然语言处理 编译器 Linux
【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
【C++】巧用缺省参数与函数重载:提升编程效率的秘密武器
|
3月前
|
程序员 C++ 开发者
C++入门教程:掌握函数重载、引用与内联函数的概念
通过上述介绍和实例,我们可以看到,函数重载提供了多态性;引用提高了函数调用的效率和便捷性;内联函数则在保证代码清晰的同时,提高了程序的运行效率。掌握这些概念,对于初学者来说是非常重要的,它们是提升C++编程技能的基石。
32 0
|
4月前
|
程序员 C++ 容器
C++编程基础:命名空间、输入输出与默认参数
命名空间、输入输出和函数默认参数是C++编程中的基础概念。合理地使用这些特性能够使代码更加清晰、模块化和易于管理。理解并掌握这些基础知识,对于每一个C++程序员来说都是非常重要的。通过上述介绍和示例,希望能够帮助你更好地理解和运用这些C++的基础特性。
53 0
|
2月前
|
存储 编译器 C语言
【c++丨STL】string类的使用
本文介绍了C++中`string`类的基本概念及其主要接口。`string`类在C++标准库中扮演着重要角色,它提供了比C语言中字符串处理函数更丰富、安全和便捷的功能。文章详细讲解了`string`类的构造函数、赋值运算符、容量管理接口、元素访问及遍历方法、字符串修改操作、字符串运算接口、常量成员和非成员函数等内容。通过实例演示了如何使用这些接口进行字符串的创建、修改、查找和比较等操作,帮助读者更好地理解和掌握`string`类的应用。
63 2