XZ Blog XZ Blog
首页
  • 人体姿态估计
  • 2D-3D-Lifting
  • 动作质量评估
  • 基于RGBD视觉信息的异常行为识别
  • 基于RGB视频的行为识别
  • 大模型应用
  • 网络结构

    • Transformer
    • GCN
    • Graph Transformers
    • Diffusion Model
  • 深度学习
  • 论文解读
  • 后端开发
  • Git
  • 博客搭建
  • Debug
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

xzhouzeng

@渐行。
首页
  • 人体姿态估计
  • 2D-3D-Lifting
  • 动作质量评估
  • 基于RGBD视觉信息的异常行为识别
  • 基于RGB视频的行为识别
  • 大模型应用
  • 网络结构

    • Transformer
    • GCN
    • Graph Transformers
    • Diffusion Model
  • 深度学习
  • 论文解读
  • 后端开发
  • Git
  • 博客搭建
  • Debug
  • 面试
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 后端开发

    • cmake介绍
    • \{}统一初始化方
      • C++11新特性
      • C++标准推荐使用标准库头文件
      • C++动态内存分配和静态的区别
      • C++类函数后面加const的作用
      • C++类和结构区别
      • C++内存区域
      • nullptr与NULL
      • priority_queue使用
      • string , cstring , string h 的区别
      • using与typedef定义别名区别
      • vector中[]和at访问区别
      • 常量指针和指针常量
      • 空类大小及相关介绍
      • 容器emplace与push操作
      • 数据结构操作——时间复杂度
      • 智能指针(Smart Pointers)
      • 最大堆的实现
    • Git

    • 博客搭建

    • Debug

    • python开发

    • 技术
    • 后端开发
    xzhouzeng
    2023-03-20
    目录

    \{}统一初始化方

    # {}统一初始化方式

    Created: March 19, 2024 1:25 PM

    在C++中提到初始化的"歧义"主要是指在C++11之前,不同类型的对象有多种初始化方式,这些方式在某些情况下可能引起代码理解上的混淆或者在特定上下文中的使用不一致性。统一的初始化语法(Uniform initialization)通过引入花括号**{}**作为通用的初始化方式,旨在解决这些问题,从而使初始化语法更加清晰和一致。

    # 初始化的歧义例子

    在C++11之前,初始化对象的方式可能包括:

    1. 直接初始化:使用圆括号**()**。
    2. 复制初始化:使用**=**后跟一个值。
    3. 聚合初始化:对于POD类型使用花括号**{}**。

    这些不同的初始化方式在某些情况下可能引发歧义,例如:

    cppCopy code
    int a(5); // 直接初始化
    int b = 5; // 复制初始化
    std::vector<int> c(5, 0); // 直接初始化,创建一个大小为5,所有元素为0的vector
    std::vector<int> d{5, 0}; // 列表初始化(C++11),创建一个包含两个元素5和0的vector
    
    1
    2
    3
    4
    5

    在C++11之前,对于聚合类型(如数组和POD结构),初始化通常使用花括号,但对于非POD类型,则需要使用其他方式,这可能导致不一致和混淆。

    # C++11的统一初始化解决方案

    C++11引入了统一的初始化语法,允许使用花括号**{}**来初始化任何类型的对象,这包括基本数据类型、聚合类型、容器、自定义类型等,无论是通过调用构造函数还是聚合初始化。这样做的好处包括:

    • 消除了初始化语法的不一致性,使得初始化表达式更加统一和清晰。
    • 避免了窄化转换,编译器会拒绝可能导致数据丢失的隐式类型转换。
    • 提高了代码的可读性和可维护性。

    使用统一的初始化语法后,初始化表达式更加直观:

    cppCopy code
    int e{5}; // 使用花括号初始化
    std::vector<int> f{5, 0}; // 列表初始化,无歧义
    
    
    1
    2
    3
    4

    通过这种方式,C++11及后续版本的代码在初始化对象时更加一致,减少了歧义和潜在的错误。

    编辑 (opens new window)
    cmake介绍
    C++11新特性

    ← cmake介绍 C++11新特性→

    最近更新
    01
    VideoLLMs
    03-20
    02
    Video2Script
    12-07
    03
    多模态
    11-09
    更多文章>
    Theme by Vdoing | Copyright © 2022-2024 xzhouzeng | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式