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>类型。

相关推荐
小老鼠不吃猫13 分钟前
C接口 中文字符问题
c语言·开发语言
技术程序猿华锋21 分钟前
Void:免费且隐私友好的 AI 编码利器,挑战 Cursor 地位?
c++·人工智能·mfc
前端码虫43 分钟前
JS分支和循环
开发语言·前端·javascript
GISer_Jing1 小时前
MonitorSDK_性能监控(从Web Vital性能指标、PerformanceObserver API和具体代码实现)
开发语言·前端·javascript
岸边的风1 小时前
JavaScript篇:JS事件冒泡:别让点击事件‘传染’!
开发语言·前端·javascript
倔强的石头1061 小时前
【C++指南】C++ list容器完全解读(二):list模拟实现,底层架构揭秘
c++·架构·list
bubiyoushang8882 小时前
matlab雷达定位仿真
开发语言·matlab
yezipi耶不耶3 小时前
Rust入门之并发编程基础(一)
开发语言·后端·rust
木子.李3473 小时前
数据结构-算法学习C++(入门)
数据库·c++·学习·算法
南瓜胖胖5 小时前
【R语言编程绘图-plotly】
开发语言·plotly·r语言