Skip to content

std::initializer_list(C++11)

一句话

一个轻量级的只读代理对象,让你能用花括号 {} 方便地给容器或自定义类传递任意数量的同类型初始值。

头文件

#include <initializer_list>

核心 API 速查

操作签名说明
构造initializer_list() noexcept创建空列表(通常由编译器隐式构造)
元素数量std::size_t size() const noexcept返回列表中的元素个数
起始指针const T* begin() const noexcept指向首元素的指针
末尾指针const T* end() const noexcept指向末尾后一位置的指针
起始迭代器const T* begin(std::initializer_list<T> il) noexcept重载的 std::begin
末尾迭代器const T* end(std::initializer_list<T> il) noexcept重载的 std::end

最小示例

cpp
// Standard: C++11
#include <iostream>
#include <initializer_list>
#include <vector>

struct Container {
    std::vector<int> v;
    Container(std::initializer_list<int> l) : v(l) {}
    void append(std::initializer_list<int> l) {
        v.insert(v.end(), l.begin(), l.end());
    }
};

int main() {
    Container c = {1, 2, 3}; // 隐式构造 initializer_list
    c.append({4, 5});
    for (int x : c.v) std::cout << x << ' ';
}

嵌入式适用性:高

  • 底层实现通常仅包含一个指针和长度(或两个指针),内存开销极小
  • 复制 std::initializer_list 不会复制底层数组,仅复制代理对象本身,无额外分配开销
  • 底层数组可能存储在只读内存中,适合用于 ROM 化的静态配置表初始化

编译器支持

GCCClangMSVC
待补充待补充待补充

另见


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

基于 VitePress 构建