簡體   English   中英

為什么std :: vector :: data()中沒有使用指針typedef?

[英]Why is the pointer typedef not used in std::vector::data()?

在std :: vector的API中有一些typedef和許多返回這些typedef的函數。

例如

reference operator[](size_type n);

其中referencesize_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM