2013-06-28 2 views
11

Ich kann identische Ausgabe erreichen, indem Sie verschiedene Container in C++ verwenden. Beispielsweise . .Welcher Typ wird automatisch für Container verwendet?

std::array<int, 5> v = {1,2,3,4,5}; 
    for(auto i : v) 
     std::cout << i << ", "; 

oder

std::vector<int> v = {1,2,3,4,5}; 

oder

int v[] = {1,2,3,4,5}; 

etc. .

Also, welcher Container benutzt auto hier?

auto v = {1,2,3,4,5}; 
    for(auto i : v) 
     std::cout << i << ", "; 

Antwort

18

std::initializer_list<int>


nicht so schwer, für sich selbst zu überprüfen, können Sie immer decltype(v), und vergleichen sie dann mit der Liste Typ.

, dass eine andere schöne Eigenschaft hat, ist, dass manchmal sehr nützlich und könnte Sie interessieren:

for (auto i : {1,2,3,4,5}) 
    std::cout << i << ", "; 

Es kann getan werden, weil initializer_list das Standardprogramm-Schnittstelle hält.

+1

'<< TYPE_DESC (v); auto v = {1,2,3,4,5}; '/' lvalue initializer_list 'Richtig. +1 –

+2

Zwei kleine Bemerkungen: Streng genommen ist 'initializer_list' kein Container im Sinne des Standards. Ihr Beispiel funktioniert, weil der Standard für Aussagen dieses Formulars explizit Entfernungs-basiert definiert. Auf den ersten Blick gibt es keine Entität vom Typ 'initializer_list'. Ein solches Objekt wird implizit eingeführt, also müssen Sie '' einschließen, aber Sie können es nicht "sehen". – MWid