3
爲什麼std::initializer_list<T>::iterator
被定義爲裸指針T const*
而不是random_access_iterator
概念?initializer_list迭代器定義的選擇
爲什麼std::initializer_list<T>::iterator
被定義爲裸指針T const*
而不是random_access_iterator
概念?initializer_list迭代器定義的選擇
原因是可能是從這個小TID位從標準
第18.9節
類型initializer_list的一個目的提供了訪問的類型爲const E. [注 對象的數組:一對指針或指針加上 的長度將是initializer_list的顯而易見的表示形式。 initializer_list用於實現初始化器列表,如8.5.4中的指定 。複製初始化程序列表不會複製底層的 元素。末端注]
這表明,當複製將指針語義,而不是值語義,這可能是爲什麼他們的迭代器是直接指針,而不是包裹成「隨機訪問迭代器」型initializer_lists。
AFAIK這是唯一的標準「」容器「(注意這裏的引號),使指針語義與數值語義相反。
指針是隨機訪問迭代器。我不知道標準中關於'initializer_list'的內容(查看之後,我看到它們是標準方式),但它允許容器的迭代器成爲指針。 – chris
@chris - 當然,但我想知道爲什麼它不同於所有其他標準容器。 –
對於初學者來說,這不是一個容器。也許簡單是一個因素。我無法確定任何事情。 – chris