[英]Why is the pointer typedef not used in std::vector::data()?
在std :: vector的API中有一些typedef和許多返回這些typedef的函數。
例如
reference operator[](size_type n);
其中reference
和size_type
是typedef。
有一個pointer
的typedef,它從它的allocator模板參數中獲取。 為什么data()
的函數簽名如下:
T* data() noexcept;
而不是:
pointer data() noexcept;
這背后有什么理由嗎? 另外為什么是T*
而不是value_type*
。
如果你想檢查它是我所擁有的標准的第23.3.6.4節。
data()
存在的原因是獲取指向向量內部的基礎數組的指針,以便(例如)可以將其傳遞給使用指針而非迭代器的API。
pointer
typedef不一定是真正的指針類型,它是std::allocator_traits<allocator_type>::pointer
的typedef,它可能是一些行為類似於指針的類類型(有時稱為“花式指針”)。
對於默認情況, std::vector<T>
是std::vector<T, std::allocator<T>>
,而std::allocator_traits<std::allocator<T>>::pointer
是同一類型作為T*
,所以沒有區別。
但是對於std::vector<T, CustomAllocator<T>>
如果data()
返回一個pointer
你將無法將它傳遞給期望T*
的函數,除非is_same<pointer, T*>::value
為true。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.