網站首頁 編程語言 正文
1.初始化列表的實現
(1)當編譯器看到{t1,t2…tn}時便會生成一個initializer_list
(2)對于聚合類型,編譯器會將array
(3)對于非聚合類型。如果該類存在一個接受initializer_list
【實例分析】initializer_list
#include#include #include
2. initializer_list模板
//initializer_list
#includetemplate class initializer_list { public: typedef T value_type; typedef const T& reference; //注意說明該對象永遠為const,不能被外部修改! typedef const T& const_reference; typedef size_t size_type; typedef const T* iterator; //永遠為const類型 typedef const T* const_iterator; private: iterator _M_array; //用于存放用{}初始化列表中的元素 size_type _M_len; //元素的個數 //編譯器可以調用private的構造函數!!! //構造函數,在調用之前,編譯會先在外部準備好一個array,同時把array的地址傳入模板 //并保存在_M_array中 constexpr initializer_list(const_iterator __a, size_type __l) :_M_array(__a),_M_len(__l){}; //注意構造函數被放到private中! constexpr initializer_list() : _M_array(0), _M_len(0){} // empty list,無參構造函數 //size()函數,用于獲取元素的個數 constexpr size_type size() const noexcept {return _M_len;} //獲取第一個元素 constexpr const_iterator begin() const noexcept {return _M_array;} //最后一個元素的下一個位置 constexpr const_iterator end() const noexcept { return begin() + _M_len; } };
(1)initializer_list是一個輕量級的容器類型,內部定義了iterator等容器必需的概念,本質上是一個迭代器!
(2)對于std:: initializer_list
(3)它有3個成員函數:size()、begin()和end()。
(4)擁有一個無參構造函數,可以被直接實例化,此時將得到一個空的列表。之后可以進行賦值操作,如initializer_list
(5)initializer_list
【編程實驗】打印初始化列表的每個元素
#include//打印初始化列表的每個元素 void print(std::initializer_list vals) { //遍歷列表中的每個元素 for(auto p = vals.begin(); p!=vals.end(); ++p){ std::cout << *p << " "; } std::cout << std::endl; } //std::initializer_list 的淺拷貝。以下的返回值應改為std //以下的返回值應改為std::vector 類型,而不是std::initializer_list 類型。 std::initializer_list func(void) int a = 1; int b = 2; return {a, b}; //編譯器看到{a, b}時,會做好一個array 對象(其生命 //期直至func結束),然后再產生一個initializer_list //臨時對象,由于initializer_list 采用的是淺拷貝,當 //函數返回后array 會被釋放,所以無法獲取到列表中的元素! int main() print({1,2,3,4,5,6,7,8,9,10}); print(func()); return 0; /*測試結果: e:\Study\C++11\7>g++ -std=c++11 test1.cpp e:\Study\C++11\7>a.exe 1 2 3 4 5 6 7 8 9 10 */
3.讓自定義的類可以接受任意長度初始化列表
(1)自定義類中重載一個可接受initializer_list
(2)在該構造函數中,遍歷列表元素并賦值給相應的字段。
【編程實驗】自定義類的初始化列表
#include#include
原文鏈接:https://www.cnblogs.com/5iedu/p/7628091.html
相關推薦
- 2022-05-16 Python中input()函數的用法實例小結_python
- 2022-08-22 Git遠程刪除某個歷史提交記錄方法詳解_相關技巧
- 2022-08-02 Shell判斷字符串變量是否為空的方法實現_linux shell
- 2022-02-19 AttributeError: ‘str‘ object has no attribute ‘dec
- 2022-11-23 StoneDB主從配置及切換實踐方案_數據庫其它
- 2022-10-27 Apache?Hive?通用調優featch抓取機制?mr本地模式_Linux
- 2023-03-17 Python導入Excel表格數據并以字典dict格式保存的操作方法_python
- 2023-04-17 Python使用future處理并發問題方案詳解_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支