C++没有“内联数组”这一语言特性。C++标准(至C++23)不支持类似C#12的[InlineArray]语法,inline关键字仅修饰函数或变量,与数组无关;栈上固定数组如int arr[256]是普通数组,并非语言级“内联数组”;等效替代方案为std::array<T, N>或结构体内的裸数组T data[N]。

C++ 没有“内联数组”这个语言特性。
为什么搜不到 inline array?
这是最常见的混淆点:C++ 标准(截至 C++23)不支持类似 C# 12 的 [InlineArray] 语法,也没有编译器内置的“内联数组”类型。你看到的“内联数组”描述,几乎都来自 C#、Go 或 Rust 的上下文,不是 C++ 的概念。
- 在 C++ 中,
inline关键字只修饰函数或变量(C++17 起),和数组无关 -
int arr[256]这类栈上固定数组,是普通数组,不是“内联数组”——它本来就内联在作用域内存里,无需额外修饰 - 有人误把“栈上分配的固定数组”叫作内联数组,但这是描述性说法,不是语言术语
C++ 里真正接近的替代方案
如果你想要的是“零堆分配、连续内存、无指针开销”的固定大小数组,C++ 提供的是:
-
std::array<T, N>:标准库容器,本质是封装了T[N]的薄包装,无额外指针,内存连续,可直接用.data()获取原生指针 - 裸数组
T data[N]:定义在结构体或局部作用域中,如struct Packet { uint32_t id; uint8_t payload[64]; };——payload就紧贴id存储,无间接访问 - 避免使用
std::vector<T>或new T[N]:它们会堆分配,带来 GC(不适用)或手动管理负担
容易踩的坑:把 C# 代码直接套到 C++ 里
下面这些写法在 C++ 中全部非法:
立即学习“C++免费学习笔记(深入)”;
-
[InlineArray(4)] struct Int4 { ... };→ 编译错误:C++ 不认识该属性 -
inline int buf[1024];→inline不能修饰数组声明,仅限函数/变量(C++17+) - 期待编译器“自动展开数组为独立字段” → C++ 没这种机制;
std::array仍是单个对象,不是 N 个独立成员
真正影响性能的关键,是数组是否在栈上/结构体内连续布局,而不是有没有叫“inline array”的语法糖。


















