C++编程法则365天一天一条(27)std::initializer_list 轻量级初始化列表

std::initializer_list是一个模板类,是一个轻量级的 const T 类型对象数组的代理对象。这意味着通过 initializer_list 访问的元素是只读的,你无法修改这些元素的值。可以简单理解为一个常量数组

它主要用于在构造函数中接收可变数量的同类型参数,以及支持统一初始化语法。

cpp 复制代码
#include <iostream>
#include <vector>
#include <initializer_list>

class MyContainer {
public:
    MyContainer(std::initializer_list<int> init) {
        for (int val : init) {
            data.push_back(val);
        }
    }

    void print() const {
        for (int val : data) {
            std::cout << val << " ";
        }
        std::cout << std::endl;
    }

private:
    std::vector<int> data;
};

int main() {
    MyContainer container = {1, 2, 3, 4, 5};
    container.print(); // 输出: 1 2 3 4 5
    return 0;
}

许多标准模板库(STL)容器(如 std::vector 和 std::set)都支持通过 initializer_list 进行初始化。

cpp 复制代码
std::vector<int> vec = {1, 2, 3, 4, 5}; // 使用 initializer_list 初始化

使用 std::initializer_list 可以明确表达你的意图,表示这个构造函数专门用于处理一组初始化值。这种语义在代码可读性上是有帮助的。

当使用大括号括起来的初始化列表(brace-enclosed initializer list)与 auto 关键字结合时,会被推导为initializer_list类型。

cpp 复制代码
auto a = {1};

a 并非int类型,而是initializer_list<int>类型。

相关推荐
wjs202415 小时前
CSS 颜色
开发语言
无巧不成书021815 小时前
Java数值字面量速查表
java·开发语言·python·开发者·字面量
小鸡吃米…15 小时前
测试线程应用程序
开发语言·python
python开发笔记15 小时前
python(79) 底层代码追踪工具
开发语言·python
kgduu15 小时前
js之错误处理
开发语言·前端·javascript
Bert.Cai15 小时前
Python函数的定义与调用
开发语言·python
美式请加冰15 小时前
模拟的介绍和使用
java·开发语言·算法
无限进步_15 小时前
深入解析vector:一个完整的C++动态数组实现
c语言·开发语言·c++·windows·git·github·visual studio
tankeven15 小时前
HJ129 小红的双生数
c++·算法
万能的小裴同学15 小时前
C++ 简易的FBX查看工具
开发语言·c++·算法