美文网首页
cpp inline 内联函数定义在头文件和源文件的区别

cpp inline 内联函数定义在头文件和源文件的区别

作者: book_02 | 来源:发表于2024-09-11 23:22 被阅读0次

在C++中,内联函数(inline function)是一种建议编译器在调用点直接展开函数代码的机制,以减少函数调用的开销。内联函数的定义可以出现在头文件(.h)或源文件(.cc、.cpp等)中,但其作用域和可见性会根据定义位置的不同而有所差异。

1. 定义在头文件中的内联函数

当内联函数定义在头文件中时,其作用域和可见性如下:

  • 全局作用域:如果内联函数在头文件中定义并且该头文件被多个源文件包含,那么这些源文件中的代码都可以调用该内联函数。

  • 外部链接:内联函数默认具有外部链接,这意味着它们可以被其他文件中的代码调用,前提是这些文件包含了声明该函数的头文件。

2. 定义在源文件中的内联函数

当内联函数定义在源文件中时,其作用域和可见性如下:

  • 文件作用域:内联函数的作用域仅限于定义它的源文件。这意味着该内联函数只能在定义它的源文件中被调用,而不能被其他源文件访问。

  • 内部链接:由于内联函数定义在源文件中,它们具有内部链接,这进一步限制了它们的可见性。

3. 示例

3.1 头文件中的内联函数

// myheader.h
#ifndef MYHEADER_H
#define MYHEADER_H

inline void inlineFunction() {
    // 函数实现
}

#endif // MYHEADER_H

// file1.cpp
#include "myheader.h"

void foo() {
    inlineFunction(); // 可以调用内联函数
}

// file2.cpp
#include "myheader.h"

void bar() {
    inlineFunction(); // 可以调用内联函数
}

3.2 源文件中的内联函数

// file1.cpp
#include "myheader.h"

inline void inlineFunction() {
    // 函数实现
}

void foo() {
    inlineFunction(); // 可以调用内联函数
}

// file2.cpp
#include "myheader.h"

// 这里无法调用 inlineFunction,因为它在 file1.cpp 中定义

4. 使用场景

  • 头文件中的内联函数:通常用于需要频繁调用且代码较短的函数,以提高性能。由于头文件被多个源文件包含,内联函数可以在多个源文件中使用。

  • 源文件中的内联函数:通常用于仅在一个源文件中使用的辅助函数,以避免在头文件中定义内联函数导致的代码膨胀和维护困难。

5. 注意事项

  • 编译器优化:编译器对内联函数的处理有一定的自由度,即使你声明了一个函数为内联函数,编译器也可能根据实际情况决定是否真的将其内联。

  • 代码膨胀:内联函数的代码会在每个调用点展开,这可能会增加可执行文件的大小。因此,内联函数通常适用于代码较短、调用频繁的函数。

通过合理使用内联函数,可以在一定程度上提高程序的性能,同时控制函数的作用域和可见性。

相关文章

  • C++ 新特性

    内联函数(inline) 内联函数其实是声明,只能放在头文件里,不能放在实现(定义)里。类在头文件里声明函数时直接...

  • C++基础

    C++ readme 避免头文件重复定义, extern C的用法: 内联函数: inline function ...

  • C++中头文件(.h)和源文件(.cpp)

    头文件(.h) 一般定义类的申明,包括类的成员变量,和 函数 例如: 源文件(.cpp) 源文件主要写实现头文件中...

  • C++中的内联函数(inline)

    一、概述 在函数头部加上修饰符 “inline”,则表示此函数为内联函数。此类函数一般在头文件定义实现。 二、作用...

  • c++分文件编写

    步骤:1.创建后缀名为.h的头文件2.在头文件中写函数的声明 3.创建后缀名为.cpp的源文件4.在源文件中写函数的定义

  • C++内联函数与C语言函数宏

    C++内联函数 什么是内联函数? 在函数的声明和定义前加一个 inline 关键字,这个函数就是内联函数。 通常会...

  • 3.构造函数

    inline(内联)函数 inline函数是直接替换函数名为函数内容.声明inline的两种方式: 函数定义时在函...

  • C++类的注意事项

    类的声明放在头文件中,类的实现放到cpp文件中 如果要把一个类的函数定义了内联函数,可以在声明中直接定义,或者在实...

  • inline函数

    在QT release模式 inline函数头文件和cpp文件分离外部会找不到实现体 在debug模式...

  • 内联函数

    内联函数 在类中定义的函数,但是实现却在类外面。并且在函数前加了 inline 就是内联函数,内联函数效率一般比较...

网友评论

      本文标题:cpp inline 内联函数定义在头文件和源文件的区别

      本文链接:https://www.haomeiwen.com/subject/rinpljtx.html