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

相关推荐
举一个梨子zz1 分钟前
Java—— 集合 List
java·开发语言·数据结构·intellij-idea
passionSnail11 分钟前
《用MATLAB玩转游戏开发:从零开始打造你的数字乐园》基础篇(2D图形交互)-贪吃蛇的百变玩法:从命令行到AI对战
开发语言·matlab·游戏程序
李匠202419 分钟前
C++GO语言微服务之gorm框架操作MySQL
开发语言·c++·后端·golang
越甲八千35 分钟前
通俗的理解MFC消息机制
c++·mfc
千里镜宵烛44 分钟前
C++ 哈希表
开发语言·数据结构·c++·哈希算法·散列表
努力学习的小廉1 小时前
【C++】 —— 笔试刷题day_27
开发语言·c++
双叶8361 小时前
(51单片机)LCD显示红外遥控相关数字(Delay延时函数)(LCD1602教程)(Int0和Timer0外部中断教程)(IR红外遥控模块教程)
c语言·数据库·c++·单片机·嵌入式硬件·mongodb·51单片机
无聊的小坏坏1 小时前
【C++】string类
c++
蜗牛沐雨1 小时前
Rust 中的 Pin 和 Unpin:内存安全与异步编程的守护者
服务器·开发语言·rust
Despacito0o1 小时前
QMK键盘固件配置详解
c++·计算机外设·mfc