2016-10-24 11 views
5

Zgodnie ze standardem std::vector<bool> nie ma funkcji członka data(). Jednak następujący fragment kompiluje grzywny z najnowszym GCC z libstdC++:Co robią dane z libstdC++ std :: vector <bool> :: data?

#include <vector> 

int main() { 
    std::vector<bool> v; 
    v.data(); 
} 

Jeśli staramy się wykorzystać wynik okazuje się, typ zwracany jest void.

Czy to jest jakieś rozszerzenie gcc lub błąd?
Jeśli ta pierwsza jest prawdziwa, co ona robi?

+2

Nie zgadzam się z dupe. Mam świadomość, że standard nie definiuje danej funkcji, pytam o zachowanie konkretnej implementacji. –

+2

Czy przeczytałeś kod źródłowy? GCC jest open source. –

+0

@LightnessRacesinOrbit Przyznaję, że nie. Wygląda na to, że pomogłoby to. :) –

Odpowiedz

10

My /usr/include/c++/4.8/bits/stl_bvector.h posiada:

// _GLIBCXX_RESOLVE_LIB_DEFECTS 
// DR 464. Suggestion for new member functions in standard containers. 
// N.B. DR 464 says nothing about vector<bool> but we need something 
// here due to the way we are implementing DR 464 in the debug-mode 
// vector class. 
void 
data() _GLIBCXX_NOEXCEPT { } 

W /usr/include/c++/4.8/debug/vector widzę deklarację:

using _Base::data; 

Tak, że wydaje się być przyczyną: wersja debugowania std::vector<bool> nie skompilować chyba std::vector<bool>::data istniał.

+0

[Link do wspomnianego DR] (https://gc.gnu.org/onlinedocs/libstdc++/ext/lwg-defects.html#464) w celach informacyjnych. –

+1

Sad. Byłoby użyteczne, gdyby zwrócił wskaźnik do spakowanego bufora. Dlaczego nie uczynić tego "prywatnym"? – Yakk