当前位置: 首页 > article >正文

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

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

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

#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 进行初始化。

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

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

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

auto a = {1};

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


http://www.kler.cn/a/377542.html

相关文章:

  • ROS(Robot Operating System)中,编写一个记录机器人速度并将其转换成轨迹
  • VMWARE ESXI VMFS阵列故障 服务器数据恢复
  • andrular输入框input监听值传递
  • 【论文阅读笔记】Wavelet Convolutions for Large Receptive Fields
  • 软件架构演变:从单体架构到LLM链式调用
  • Golang | Leetcode Golang题解之第524题通过删除字母匹配到字典里最长单词
  • OKHTTP断点续传
  • 【运输&加载码头】仓库新卸物料检测系统源码&数据集全套:改进yolo11-DRBNCSPELAN
  • 利用Docker Compose构建微服务架构
  • 90%的读者都惊呆了!一键生成的微头条,连作者都认不出来是AI作品?
  • Linux常见指令大全(必要+知识点)
  • 设计模式08-行为型模式(命令模式/迭代器模式/观察者模式/Java)
  • 免公网服务器实现DDNS功能(API动态修改DNS解析IP)
  • webstorm 项目如何配置支持 nodejs
  • 怎么提取视频里的音频?关于提取视频里音频的几种方法
  • 【含文档】基于ssm+jsp的老年人健康管理系统(含源码+数据库+lw)
  • 移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (4) - 平台适配
  • 计算机视觉和深度学习有什么区别
  • Leetcode21:合并两个有效链表
  • 关于Android Studio Http Proxy设置
  • 力扣排序268题 数字丢失
  • h5st参数解析
  • 石狮自闭症儿童全托:创造多彩童年,共享快乐成长
  • 我们来学mysql -- 连接(原理版)
  • vue+websocket实现即时聊天平台
  • C/C++--10--VS2008编译C语言时如何将const LineA * 里面的值赋值给另外一个结构体LineA?