C + + 使用小括号/大括号直接赋值,又叫列表初始化。简介

2023-11-05

C + + 使用小括号/大括号直接赋值,又叫列表初始化。简介

--------------------------------------------------------------------

C + +可以使用 小括号/大括号 直接赋值,并且,兼容了 C风格 的等号(=)赋值。

=======================================

C + + 使用小括号/大括号直接赋值,又叫列表初始化。简介

C++ 中,我们可以使用小括号直接赋值的方式,将多个值赋给一个对象或变量。这种方式叫做列表初始化(List Initialization),可以用于初始化各种类型的对象,例如:

    int x(1);             // 将值 1 赋给变量 x
    double pi{3.14159};   // 将值 3.14159 赋给变量 pi
    std::string s{"hello"};// 将字符串 "hello" 赋给变量 s
    std::vector<int> v{1, 2, 3}; // 初始化一个整型向量

在上面的例子中,使用小括号或大括号括起来的一组值被视为一个初始化列表,用于初始化变量或对象。

需要注意的是,列表初始化具有类型检查和类型转换的功能。如果初始化列表中的值类型不匹配,或者无法进行隐式类型转换,编译器将会报错。例如:

    int x{3.14}; // 错误:无法将浮点数转换为整型
    char c{-1};  // 错误:无法将负数转换为字符

如果需要对数组进行列表初始化,可以使用大括号括起来一组值的方式进行初始化,例如:

    int arr[] = {1, 2, 3}; // 初始化整型数组
    int mat[][3] = {{1, 2, 3}, {4, 5, 6}}; // 初始化二维整型数组

在上面的例子中,使用大括号括起来的一组值被视为一个初始化列表,用于初始化数组。注意,对于多维数组,需要用多组大括号来表示不同维度上的值。

为了与对象(类)的初始化方法相同,C++中给普通变量增加了新的赋值方式。

    /*输入输出流头文件*/
    #include <iostream>//头文件,与C语言的头文件的区别是没有.h
    using namespace std;//命令空间,先写在这里,不用问为什么,后期会单独讲
    int main()//C++规定,主函数的返回值必须是int类型的
    {
        int a = 10;
        cout<<a<<endl;
        int b(12);//C++11支持的写法,相当于int b = 12;
        //使用括号时需要定义的同时初始化
        b = 4;
        cout<<b<<endl;
        double c = 3.13;
        int d(c);
        //后面使用对象初始化时,用的都是圆括号,花括号我们不用
        cout<<d<<endl;//3
        int e{a};
        cout<<e<<endl;
        int f{(int)c};//C++11增加了数据窄化操作,如果非要进行不同类型之间的赋值,需要强转
        cout<<f<<endl;
        return 0;
    }

除了数组和变量,列表初始化还可以用于以下几种类型的对象:

结构体和类对象

C++ 中的结构体和类对象可以用列表初始化的方式进行初始化,例如:

    struct Point {
        int x;
        int y;
    };
     
    Point p{1, 2}; // 初始化一个 Point 对象

在上面的例子中,使用大括号括起来的一组值被视为一个初始化列表,用于初始化结构体变量 p。

枚举类型

C++ 中的枚举类型也可以用列表初始化的方式进行初始化,例如:

    enum Color {
        RED,
        GREEN,
        BLUE
    };
     
    Color c{GREEN}; // 初始化一个枚举类型的变量

在上面的例子中,使用大括号括起来的一个值被视为一个初始化列表,用于初始化枚举类型变量 c。

STL 容器

C++ 中的 STL 容器,如 std::vector、std::list、std::map 等,也可以用列表初始化的方式进行初始化,例如:

    std::vector<int> v{1, 2, 3}; // 初始化一个整型向量
    std::map<std::string, int> m{{"one", 1}, {"two", 2}, {"three", 3}}; // 初始化一个字符串到整型的映射

在上面的例子中,使用大括号括起来的一组值被视为一个初始化列表,用于初始化 STL 容器。

需要注意的是,不是所有的类型都支持列表初始化,只有实现了相应的构造函数或者使用了聚合初始化的类型才能支持列表初始化。如果一个类型没有相应的构造函数,或者不是聚合类型,那么列表初始化将会失败。
————————————————
版权声明:本文为CSDN博主「Robin.Su」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/robin__su/article/details/131699245

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C + + 使用小括号/大括号直接赋值,又叫列表初始化。简介 的相关文章

  • MAC 上的 QT/C++ - 未设置应用程序图标

    我正在努力解决的奇怪问题 在与我的 pro QT 项目文件相同的文件夹中 我有一个 Resources myIcon png 我试图将其设置为我构建的应用程序的图标 在 OSX 上运行 我阅读了文档 它建议在 pro 文件中添加 ICON
  • 从 QML 实例化 C++ 对象会产生巨大的内存使用开销

    实例化一个QObjectC 堆中的派生类为每个对象提供了大约 160 个字节 通过注册相同的对象qmlRegisterType 用于从 QML 创建并通过以下方式动态创建对象createObject 每个对象给我 2000 多个字节 这是完
  • 为什么下面的重叠比较总是评估为 true

    我不明白为什么以下代码有警告 指出重叠比较始终评估为真 接下来的语句永远不会被执行 QVariant MainModel data const QModelIndex index int role const if index isVali
  • QGraphicsView 和 eventFilter

    这个问题已经困扰我两天多了 所以我想我应该问一下 我在Win7上使用Qt 4 5 3 用VC2008编译 我有 MyGraphicsView 继承 QGraphicsView 和 MyFilter 继承 QObject 类 当我将 MyFi
  • QDesktopServices::openUrl 在资源管理器中选择指定文件

    在大多数编码程序中 您可以右键单击该项目 然后单击 在资源管理器中显示 它会在资源管理器中显示选定项目的文件 在 Qt 中使用 QDesktopServices 如何做到这一点 或在 QT 中执行此操作的任何方式 您可以使用此方法在 Win
  • Qt mouseReleaseEvent() 未触发?

    我有一个显示图片的库 我们称之为 PictureGLWidget 其中 class PictureGLWidget public QGLWidget 所以 PictureGLWidget 扩展了 QGLWidget 在PictureGlWi
  • Qt 创建者 + MITK (Linux)

    我正在尝试使用MITK 与 Qt Creator 我已经通过 ccmake 成功编译并使用了 VTK 和 ITK 我已经编译了 MITK超级建造模式 它下载 CTK VTK ITK 等 然后我就配置好了 我已经用 make 编译了 大约两个
  • Qt WinRT 应用程序无法访问文件权限被拒绝

    我需要使用 Qt 和 FFMPEG 开发 WinRT 应用程序 我根据指令构建了 WinRT 的 ffmpeghere https github com Microsoft FFmpegInterop我可以将库与我的项目链接起来 现在我需要
  • PyQt:如何设置组合框项目可检查?

    为了将 GUI 小部件数量保持在最低限度 我需要找到一种方法来为用户提供下拉菜单项的选择 这些菜单项可用于过滤掉 listWidget 项中显示的内容 假设 listWidget 列出了 5 个不同类别的项目 Cat A Cat B Cat
  • 如何在带有预编译头的项目中使用google protobuf

    我有一个包含多个项目的解决方案 我的项目 但不是全部 使用预编译头 我决定使用 protobuf 但遇到了一个问题 在 protoc exe 从 proto 生成 pb h 后 我尝试包含标头并收到错误 预编译标头未包含在 pb h 中 我
  • 重定向 python 交互式帮助()

    我正在为使用 Qt 的应用程序开发交互式 python shell 但是我似乎无法获得重定向的交互式帮助 我的 python 代码中有这个 class OutputCatcher def init self self data def wr
  • 如何在 Qt 中以编程方式制作一条水平线

    我想弄清楚如何在 Qt 中制作一条水平线 这很容易在设计器中创建 但我想以编程方式创建一个 我已经做了一些谷歌搜索并查看了 ui 文件中的 xml 但无法弄清楚任何内容 ui 文件中的 xml 如下所示
  • 使用 Visual Studio 2013 构建 Qt 5.2.1 的静态版本

    几天来我一直在尝试使用 Visual Studio 2013 构建 Qt 的静态版本 我就是不明白我做错了什么 System Windows 7 64 位 Visual Studio 2013 仍安装 Visual Studio 2012
  • QToolButton:更改菜单位置

    使用菜单时QToolButton菜单显示在按钮的正下方 有没有办法在按钮的左侧 右侧显示菜单 我知道这个问题不久前已得到回答 但我想为此问题添加新答案 因为接受的答案不再有效 实际上 更改 QToolButton 上的菜单位置非常容易 您需
  • QCombobox 向下箭头图像

    如何更改Qcombobox向下箭头图像 现在我正在使用这个 QSS 代码 但这不起作用 我无法删除向下箭头边框 QComboBox border 0px QComboBox down arrow border 0px background
  • 即使在可访问性中勾选应用程序,AXIsProcessTrustedWithOptions 也不会返回 true

    As this question https stackoverflow com questions 17693408 enable access for assistive devices programmatically on 10 9
  • Qt - 无法让 lambda 工作[重复]

    这个问题在这里已经有答案了 我有以下功能 我想在其中修剪我的std set
  • 同时从多个流中捕获、最佳方法以及如何减少 CPU 使用率

    我目前正在编写一个应用程序 该应用程序将捕获大量 RTSP 流 在我的例子中为 12 个 并将其显示在 QT 小部件上 当我超过大约 6 7 个流时 问题就会出现 CPU 使用率激增并且出现明显的卡顿 我认为它不是 QT 绘制函数的原因是因
  • 如何在 QtQuick 2 中对 QML TableView 进行排序?

    我想使用 Qt 5 1 实现具有自定义角色的可排序 TableView 但我不知道当用户单击标题时该怎么做才能对其进行排序 在我的 Qt pro 文件中 我添加了 android ios blackberry qtHaveModule wi
  • 如何为 Windows 构建静态 Qt 库并将其与 Qt Creator 一起使用

    我已经下载了以下 Qt 源 http download qt nokia com qt source qt everywhere opensource src 4 7 3 zip http download qt nokia com qt

随机推荐

  • tomcat设置线程数

    查看Tomcat线程数 1 Tomcat默认线程数200 2 修改server xml文件 增加maxThreads minSpareThreads maxSpareThreads acceptCount 3 参数解释 maxThreads
  • 股指期货的基差为负值说明什么(股指期货的基差为负值说明什么问题)

    期货基差低于全年基差是什么意思 简单说期货基差的意思就是现阶段某个期货价格和现货价格之间的差价 基差 现货价格 期货价格 基差为负值 说明现货过多 此时现货价格小于该商品的期货价格 基差为正值 说明当市场商品供应出现短缺 供不应求时 现货价
  • AD20/Altium designer——如何从立创EDA获取元器件封装库原理图库PCB库

    1 打开并登录立创EDA 找到需要的元器件 2 导出原理图 PCB封装文件 1 导出原理图封装 2 导出PCB封装 与上述导出方法同理 2 打开AD20软件 1 新建原理图库和PCB元件库 2 将刚下载的文件拖入AD内打开 3 复制白嫖元器
  • 使用vsomeip遇到的一些问题

    1 接口设计 在编写fdepl文件时 要先写attribute 在写method 再写broadcast 不能像fidl文件 穿插着写 否则编译不过 2 在运行程序时 有时候会遇到无法连接的问题 需要把 tmp vsomeip 0 这一系列
  • 宏定义中有浮点数_算法笔记

    2 9 2浮点数的比较 由于计算机当中采用有限位的二进制编码 因此浮点数在计算机当中的存储并不总是精确地 例如在大量的计算以后 一个浮点类型的数3 14在计算机当中可能存储成3 1400000000001 也有可能存储成3 13999999
  • 动态NFT的构建、部署和出售

    原文地址 NFT是只有在区块链领域里才存在的工具 有着广泛的应用和机遇 ERC721代币标准可以构建收藏品 独立代币 票据 游戏等多种应用 对于那些想要参与构建的开发者来说 一个动态和随机的NFT是一个很好的开始 但我们现在可以用它做什么
  • 【机器学习实战】11、利用SVD简化数据

    文章目录 14 1 1 隐形语义索引 14 1 2 推荐系统 14 2 矩阵分解 SVD矩阵分解 14 3 利用python实现SVD 14 4 1 相似度计算 14 4 2 基于物品的相似度还是基于用户的相似度 14 4 3 推荐引擎的评
  • 【数据挖掘】数据清洗

    什么是数据清洗 数据清洗是指发现并纠正数据文件中可识别的错误的最后一道程序 包括检查数据一致性 处理无效值和缺失值等 与问卷审核不同 录入后的数据清理一般是由计算机而不是人工完成 数据清洗的步骤 缺失值的处理 无效值的处理 统一规格 纠正错
  • 断点续传与差分升级

    断点续传的原理 基于STM32单片机的差分升级 增量升级 算法 OTA 差分升级 云端一体化差分升级 AliOS Things物联网升级 利器 详解STM32在线IAP升级 单片机差分升级算法 STM32 M0 M3 M4等芯片都适用 Al
  • 【DICOM医学影像1】数据格式存储于显示,基本知识科普指南

    DICOM Digital Imaging and Communications in Medicine 数据格式 是医学影像存储中的标准格式 无论是X光 CT 还是MRI等等影像 采集的原理不同 但是存储的格式一般都是统一的 本文就对DI
  • 杂记——4.书写spring时出现的Error creating bean with name ‘user0‘ defined in file错误

    目录 1 问题描述 2 情况描述 3 解决方法 4 问题原因 1 问题描述 当我们运行一个spring程序时 出现下图的错误 重点语句 Error creating bean with name user011 defined in fil
  • 腾讯在线教育互动课堂——Demo调试过程记录

    官方文档地址 https cloud tencent com document product 680 17888 Demo调试 不像集成使用 不需要完全按照文档一步步处理 基本的代码 集成在下载下来的demo项目上都已经写好了 以下记录以
  • 550种Blender风格化笔刷素材

    550种Blender风格化笔刷素材 550 Blender刷风格化版 包括4K阿尔法 大小解压后 3G 信息 一个伟大的自定义风格化的刷子使用Blender收集 Alphas包含在其他软件中使用 ArtStation MEGAPACK 5
  • 小程序中 rich-text 显示富文本

    在使用 rich text 来显示fuwq富文本时需要注意后台返回的数据是一个网页转义字符 直接使用rich text的话是无法正常解析的 那么需要使用下面的一个方法进行反转义即可 小程序里的转义方法 escape2Html functio
  • More Effective C++

    链接 https pan baidu com s 1oIns7Z7CWD6zAz17IFImWw 提取码 4stq Scott Meyers大师Effective三部曲 Effective C More Effective C Effect
  • C/C++编程笔记:C++中的指针与引用,又在什么时候使用?

    C和C 支持与大多数其他编程语言不同的指针 其他语言包括C Java Python Ruby Perl和PHP 从表面上看 引用和指针非常相似 都用于使一个变量提供对另一变量的访问 两者都提供了许多相同的功能 因此通常不清楚这些不同机制之间
  • 8086/8088的寻址方式

    根据操作数所在位置将寻址方式分为 立即寻址 寄存器寻址 存储器寻址 I O端口寻址 立即寻址 操作数位于指令区 代码段 如 Mov dx 2100H Mov AX A 源操作数不能超过目的操作数的表数范围 必须符合数据类型相匹配的原则 立即
  • 多数CEO预计受疫情影响未来半年收入将下降;上海国际酒店投资加盟展将延期

    全球抗击新冠疫情 关于COVID 19商业影响的新YPO行政总裁全球调查发布 由130个国家超过29000位首席执行官组成的全球领导力社区YPO进行了一项全会员调查 以了解COVID 19的商业影响 了解首席执行官由于这一新的商业现实而采取
  • CSDN博客修改不了头像的最新解决方法

    自己的博客不能改头像 清理缓存 换IE浏览器 都不行 以前有类似经历 可以在手机APP上修改头像 然后自动同步了 下载 CSDN APP 左上角 个人中心 点击 头像 修改就好了 我修改后没立即出来 延迟可能
  • C + + 使用小括号/大括号直接赋值,又叫列表初始化。简介

    C 使用小括号 大括号直接赋值 又叫列表初始化 简介 C 可以使用 小括号 大括号 直接赋值 并且 兼容了 C风格 的等号 赋值 C 使用小括号 大括号直接赋值 又叫列表初始化 简介 C 中 我们可以使用小括号直接赋值的方式 将多个值赋给一