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++ 花括號內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java?C++?算法題解leetcode669修剪二叉搜索樹示例
這篇文章主要為大家介紹了Java?C++?算法題解leetcode669修剪二叉搜索樹示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09