C++函数 (functions)

C++函数 (functions)

函数声明:

函数声明告诉编译器函数的名称,返回类型和参数列表,但不包含函数体。作用:

  • 让编译器知道函数的存在,以便在定义之前使用(通常用于头文件)

  • 允许代码结构更加清晰(函数声明在前,定义在后)。

语法:

返回类型 函数名(参数列表);

函数定义:

函数定义包括函数的完整实现,即包括函数体(代码逻辑)。

语法:

返回类型 函数名(参数列表) {
    // 函数体(实现代码)
    return 返回值;  // (如果返回类型不是 `void`)
}

函数声明和定义的分离:

通常在头文件(.h)里声明函数,然后在实现文件(.cpp)里定义函数,提高代码的可维护性和模块化。

一般情况下:

  • 库函数,头文件中的函数需要声明,以便多个.cpp文件使用

  • 小型项目可以直接定义函数,不需要额外声明。

按值传递 (Pass by Value):

特点:

  • 函数接收的是参数的副本,对副本的修改不会影响原变量。

  • 优点:安全,不会修改原始数据。

  • 缺点:占用额外的内存(尤其是大型对象时),效率极低。

#include <iostream>

void modifyValue(int x) {
    x = 100; // 仅修改了副本,不影响原来的变量
}

int main() {
    int a = 10;
    modifyValue(a);
    std::cout << "a = " << a << std::endl; // 仍然是 10
    return 0;
}

按引用传递 (Pass by Reference):

特点:

  • 函数接收的是原变量的引用,对参数的修改会直接影响原变量。

  • 优点:效率更高,不需要创建副本,适用于大型对象。

  • 缺点:函数内部的修改会影响原数据,可能导致意外修改。

#include <iostream>

void modifyValue(int &x) { // 使用 & 传引用
    x = 100; // 直接修改原变量
}

int main() {
    int a = 10;
    modifyValue(a);
    std::cout << "a = " << a << std::endl; // 现在是 100
    return 0;
}

内联函数 (Inline Function):

内联函数(Inline Function) 是一种用于提高程序运行效率的优化方式。当函数被声明为inline时,编译器可能会将函数调用替换为函数体本身,从而避免函数调用的开销。

inline int add(int a, int b) {
    return a + b;
}

int main() {
    int result = add(5, 3); // 编译器可能会将其优化为:int result = 5 + 3;
    return 0;
}

什么时候需要使用内联函数:

  1. 小型,简单的函数:函数体很小且逻辑简单,内联可以减少函数调用开销。

  2. 频繁调用的函数: 程序热点区域频繁调用的小函数

  3. 性能关键区域:对性能要求极高的代码中的函数调用

  4. 类中的简单访问器和修改器:如getter和setter

  5. 模版函数:通常模版函数会自动成为内联函数。

什么时候不需要使用内联函数:

  1. 大型复杂函数: 函数体庞大或包含复杂逻辑,内联反而会增加代码体积。

  2. 包含循环或递归的函数: 这类函数内联后会大幅增加代码体积。

  3. 函数中有静态变量