C++函数
前言
这一节我们将正式进入函数的相关学习,这一节内容很重要!!!可能会涉及到一些之前所学习的相关知识,如果你还有不明不白的,可以去温习一下之前所学C++基础教程
C++函数
在C++中,函数就像是一个小助手,它负责完成一个特定的任务。你可以把一段代码想象成是一个小助手,当你需要它的时候,就可以召唤它来帮你做事,而不需要每次都从头开始写这段代码。
每个C++程序至少会有一个主函数,也就是main()函数,它是程序的起点。但是,你还可以定义更多的函数来帮助你完成不同的任务。
函数声明就像是给小助手起个名字,告诉计算机它叫什么,能帮你做什么,以及你需要给它什么信息(参数)。函数定义则是真正告诉计算机这个小助手具体应该怎么做。
C++标准库就像是一个有很多小助手的团队,它们已经准备好了,你可以直接召唤它们来帮你做事,比如strcat()可以把两个字符串连在一起,memcpy()可以帮你复制一段内存。
函数还有其他的名字,比如方法、子例程或者程序,它们都是做同样的事情:帮你完成任务。
总结一下,函数就是一段可以重复使用的代码,它负责完成一个特定的任务。你可以通过声明和定义来创建自己的函数,也可以使用C++标准库中已经定义好的函数。这样可以让你的程序更加整洁和高效。
函数的定义
一个函数的基本结构如下:
1 | 返回类型 函数名(参数列表) { |
组成部分:
- 返回类型(Return Type): 指定函数完成任务后返回的数据类型。如果函数不返回任何值,使用
void。 - 函数名(Function Name): 函数的标识符,用于调用函数。
- 参数列表(Parameter List): 函数接受的输入,类似占位符。在调用函数时,实际参数的值会传递给这些参数。参数可以有多个,也可以没有。
- 函数体(Function Body): 包含实现函数功能的代码块。
示例:
1 | // 返回两个数中较大的一个 |
函数声明
函数声明告诉编译器函数的名称和如何调用它,实际的函数体可以在别处定义。
格式:
1 | 返回类型 函数名(参数列表); |
示例:
1 | int max(int num1, int num2); |
参数名在函数声明中是可选的,只要指定类型即可:
1 | int max(int, int); |
调用函数
当我们需要使用函数时,通过函数名和参数来调用它。
示例程序:
1 |
|
输出:
1 | 最大值是:200 |
函数参数
函数可以通过参数接受输入,有三种传递参数的方式:
- 值传递(Pass by Value): 将实际参数的值复制一份传递给函数。函数内对参数的修改不会影响实际参数。
- 指针传递(Pass by Pointer): 将实际参数的地址传递给函数。函数可以通过指针修改实际参数的值。
- 引用传递(Pass by Reference): 传递参数的引用,函数内对参数的修改会直接影响实际参数。
注意: 默认情况下,C++ 使用值传递。
参数的默认值
函数参数可以有默认值,如果在调用函数时未提供该参数的值,将使用默认值。
示例:
1 |
|
输出:
1 | 总和是:300 |
Lambda 函数与表达式
C++11 引入了匿名函数,称为 Lambda 函数或 Lambda 表达式。它们使您可以在代码中定义简短的内联函数。
基本形式:
1 | [capture](参数列表) -> 返回类型 { |
- [capture](捕获列表): 指定哪些外部变量可以在 Lambda 中使用。
- (参数列表): Lambda 接受的参数。
- 返回类型(可选): 如果编译器无法推断返回类型,可以显式指定。
- 函数体: Lambda 执行的代码。
示例:
1 | // 简单的比较函数 |
无参数的 Lambda:
1 | // 不接受参数的 Lambda |
指定返回类型的 Lambda:
1 | // 显式指定返回类型 |
捕获列表(Capture List)
Lambda 可以捕获其所在作用域的变量,有多种方式:
- []: 不捕获任何变量。尝试使用外部变量会导致错误。
- [x, &y]: 捕获
x的值,捕获y的引用。 - [&]: 引用捕获所有在 Lambda 中使用的外部变量。
- [=]: 值捕获所有在 Lambda 中使用的外部变量。
- [&, x]: 引用捕获除
x之外的所有变量,x值捕获。 - [=, &z]: 值捕获除
z之外的所有变量,z引用捕获。
注意使用 this 指针:
对于
[=]或[&],this指针会被自动捕获,可直接使用成员变量和函数。对于
[],如果需要使用this,必须显式捕获:1
[this]() { this->someFunc(); }();








