Skip to main content

Command Palette

Search for a command to run...

C++函数 (functions)

Published
1 min readView as Markdown
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. 函数中有静态变量

More from this blog

C++数组和向量:

数组 (Array) 数组是固定大小的连续内存块,在编译时确定大小。它们在内存中是静态分配的,意味着大小不可改变。 声明和初始化数组 int arr[5] = {1, 2, 3, 4, 5}; //声明并初始化一个包含5个整数数组 优点: 性能高:数组的访问速度较快,因为它们在内存中是连续的。 内存占用少:没有额外的开销 缺点: 大小固定: 一旦声明,数组的大小不可更改。 不便于扩展:如果需要增加元素,必须手动创建一个新的更大的数组并复制原数组的内容。 std::array (...

Mar 5, 20251 min read
C++数组和向量:

CPP Tutorial

5 posts