W interfejsie API std :: vector istnieje kilka typedefs i wiele funkcji, które zwracają te typedefs.Dlaczego wskaźnik typedef nie jest używany w std :: vector :: data()?
np.
reference operator[](size_type n);
Gdzie reference
i size_type
są typedefs.
Istnieje typedef z pointer
, który pobiera z argumentu szablonu alokatora. tam
pointer data() noexcept;
pewne Rozumowanie to: dlaczego jest podpis funkcją data()
tak:
T* data() noexcept;
Zamiast? Dlaczego nie jest to T*
, a nie value_type*
.
Jeśli chcesz to sprawdzić, to sekcja 23.3.6.4 standardu, który mam.
Zobacz także LWG wydanie [1312] (http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#1312) (gdzie to się zmieniło) – hlt
Widzę , ponieważ interoperacyjność C, w której się znajduje, zostałaby zerwana, gdyby zwracała "wskaźnik". Ponieważ jest to powód funkcji, ma to sens. Dzięki. – davidcorne
Racja, chociaż to nie tylko interoperacyjność C. Istnieją interfejsy C++, które również obsługują surowe wskaźniki. –