C++ 花括号{}初始化小结
作者: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++ 花括号内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!