Skip to content

内联变量(C++17)

一句话

inline 修饰命名空间作用域的变量,允许在头文件中定义全局变量而不会产生多重定义链接错误——编译器保证整个程序只有一个实例。

头文件

无(语言特性)

核心 API 速查

语法说明
inline T var = val;命名空间作用域的内联变量定义
inline constexpr T var = val;constexpr 变量隐式 inline,无需重复标注
inline static T var = val;类内静态成员变量,C++17 起可在类内直接初始化
inline thread_local T var = val;配合线程局部存储

最小示例

cpp
// Standard: C++17
// header.h
#pragma once
#include <string>

inline const std::string kVersion = "1.0.0";
inline int kMaxRetries = 3;

// 多个翻译单元 include 此头文件,
// 链接时保证只有一个 kVersion 和 kMaxRetries 实例
cpp
// main.cpp
#include <iostream>
#include "header.h"

int main() {
    std::cout << kVersion << "\n";     // 1.0.0
    std::cout << kMaxRetries << "\n";  // 3
}

嵌入式适用性:高

  • 头文件库(header-only library)的理想搭档,替代 extern 全局变量模式
  • constexpr 变量隐式 inline,嵌入式常用的编译期常量表天然受益
  • 消除"头文件中声明 + 源文件中定义"的样板代码
  • 零运行时开销,仅影响链接阶段的符号合并

编译器支持

GCCClangMSVC
73.919.1

另见


部分内容参考自 cppreference.com,采用 CC-BY-SA 4.0 许可

基于 VitePress 构建