C++ 花括号{}初始化小结

 更新时间:2023年06月27日 14:28:32   作者:Jiali_0323  
在C++11及以后的版本中,花括号{}语法在不同语境下有不同的用法,本文就详细的介绍C++ 花括号{}初始化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在C++11及以后的版本中,花括号{}语法在不同语境下有不同的用法,下面总结使用{}的常见场景:

1 列表初始化

List Initialization

{}可以使用列表初始化的方式初始化对象,包括内置类型,数组,容器等。如:

int x = {5};            // x被初始化为5
std::vector<int> v = {1, 2, 3};  // 用三个元素初始化一个数组
int arr[] = {1, 2, 3};  // 用三个元素初始化一个数组

列表初始化确保初始化是充分定义的。

2 值初始化

Value Initialization

在某些情况下,{}会用零或者默认值来初始化一个对象,如:

int x{};       // x被初始化为0
double d{};    // x被初始化为0

对于没有初始化构造函数的对象,可以使用值初始化的方式。

3 空初始化

Empty Initialization

在某些情况下,{}会将对象初始化为空,如:

std::string s{};      // 初始化一个空字符串
std::vector<int> v{}; // 初始化一个空容器
char arr[10]{}; //初始化一个空数组

4 指针的空初始化

Empty Initialization of Pointers
{}可以将指针初始化为nullptr,表示其暂时不指向任何对象。

int* ptr{};         // 将指针初始化为nullptr
std::shared_ptr<int> sp{};  // 将共享指针初始化为nullptr

花括号实际上是通过initializer_list的方式来实现

vector (initializer_list<value_type> il,
const allocator_type& alloc = allocator_type());   //vector使用initializer_list进行初始化

C++11中提供了initializer_list类(初始值列表,定义在initializer_list头文件中),用于处理参数类型相同但是数量可变的情况

initializer_list<T> lst; 
// 默认初始化,元素列表为空
initializer_list<T> lst{a, b,c...}; 
// lst的元素为对应初始值的副本,列表中元素均为const,不能修改

lst2(lst)       拷贝操作,不会拷贝列表中的元素

lst2 = lst      赋值操作,不会拷贝列表中的元素

lst.size()      返回列表的大小

lst.begin()    返回指向lst中首元素的指针

lst.end()       返回指向lst中尾元素下一个位置的指针

初始值列表并没有提供可以增删元素的操作,所以只能可以通过花括号的方式构造initializer_list对象,然后作为参数传入,使用时通过迭代器进行遍历。

到此这篇关于C++ 花括号{}初始化小结的文章就介绍到这了,更多相关C++ 花括号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • C++中运算符重载的规则语法实例

    C++中运算符重载的规则语法实例

    今天小编就为大家分享一篇关于C++中运算符重载的规则语法实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • c++容器list、vector、map、set区别与用法详解

    c++容器list、vector、map、set区别与用法详解

    这篇文章主要介绍了c++容器list、vector、map、set区别与用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Qt实现苹果状态切换按钮

    Qt实现苹果状态切换按钮

    这篇文章主要为大家详细介绍了Qt实现苹果状态切换按钮,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • c语言如何实现DES加密解密

    c语言如何实现DES加密解密

    这篇文章主要介绍了c语言如何实现DES加密解密问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • 浅析char 指针变量char *=p 这个语句的输出问题

    浅析char 指针变量char *=p 这个语句的输出问题

    下面小编就为大家带来一篇浅析char 指针变量char *=p 这个语句的输出问题。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • C语言数据结构之vector底层实现机制解析

    C语言数据结构之vector底层实现机制解析

    向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组
    2021-11-11
  • 详解C语言编程之thread多线程

    详解C语言编程之thread多线程

    这篇文章主要为大家介绍了C语言编程之thread多线程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • VC中CDC、HDC、pDC区别与联系及相互转换

    VC中CDC、HDC、pDC区别与联系及相互转换

    这篇文章主要介绍了VC中CDC、HDC、pDC区别与联系及相互转换的方法,非常的详细,有需要的小伙伴可以参考下,希望对大家学习VC能够有所帮助。
    2015-11-11
  • 简单聊聊C++中线程的原理与实现

    简单聊聊C++中线程的原理与实现

    C++11 引入了多线程支持,提供了一套基本的线程库,包括线程、互斥量(mutex)、条件变量(condition_variable)等。这些组件可以帮助你在 C++ 程序中实现并发和多线程编程,本文就来和大家简单聊聊吧
    2023-03-03
  • C++实现LeetCode(40.组合之和之二)

    C++实现LeetCode(40.组合之和之二)

    这篇文章主要介绍了C++实现LeetCode(40.组合之和之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07

最新评论