2010-12-16 15 views
8

Eric Lippert napisał artykuł o Why no var on fields? w języku C#. Byłem ciekawy, czy będziemy w stanie to zrobić w C++ 0x? dawny.Czy można wykonać następujące czynności z auto w C++ 0x?

struct mystruct_t 
{ 
    auto i = 0, d = 0.0, s = std::string("zero"); 
}; 

Nie mogłem uzyskać odpowiedzi w najnowszym projekcie, przepraszam.

Dzięki,

+0

Nie sądzę, że auto jest tam dozwolone. Ale nawet gdyby tak było, nie działałoby to, ponieważ spowodowałoby to niepowodzenie odliczenia. We wszystkich trzech przypadkach "auto" musi być tego samego typu. – sellibitze

+0

Czy umieszczenie ich w oddzielnych deklaracjach jest w porządku? Chodzi mi o to, czy możemy rzeczywiście używać auto wewnątrz struktury, jak pokazałem w przykładzie? – AraK

+4

Nie wiem, dlaczego jest to odrzucane. To brzmi jak ważne pytanie. –

Odpowiedz

12

Niestety nie można. Specyfikacja podaje się pod 7.1.6.4/3 i podąża za

W przeciwnym razie typ zmiennej wywodzi się z jej inicjatora. Nazwa deklarowanej zmiennej nie pojawia się w wyrażeniu inicjalizacyjnym. Takie użycie funkcji auto jest dozwolone, gdy deklarowane są zmienne w bloku (6.3), w obszarze przestrzeni nazw (3.3.6) oraz w instrukcji na potrzeby init (6.5.3).

Specyfikator typu auto może być również używany do zadeklarowania zmiennej w warunku instrukcji wyboru (6.4) lub instrukcji iteracji (6.5), w specyfikacji typu-seq w identyfikatorze nowego-typu lub id-type nowego wyrażenia (5.3.4), w deklaracji do zakresu i deklarując statyczny element danych za pomocą inicjalizatora klamrowego lub równoważnego, który pojawia się w specyfikacji składowej definicji klasy (9.4.2).

Program wykorzystujący auto w kontekście, który nie jest wyraźnie dozwolony w tej sekcji, jest nieprawidłowy.

Nie jestem pewien, dlaczego zakazują auto dla niestatycznych członków danych, byłoby bardzo przydatne.

+0

Twoja odpowiedź wydaje się znacznie lepsza niż moja. Muszę znaleźć czas na odczyt rzeczywistej specyfikacji C++ 0x ... –

+0

W jaki sposób kompilator określi typ niestatycznych elementów "auto"? –

+0

Dzięki @litb :) – AraK