W większości kontekstów, można użyć typu rozbudowany specyfikatorstruct foo
lub równoważnie class foo
, zamiast tylko nazwy klasy foo
. Może to być przydatne do rozwiązywania niejasności:
struct foo {}; // Declares a type
foo foo; // Declares a variable with the same name
foo bar; // Error: "foo" refers to the variable
struct foo bar; // OK: "foo" explicitly refers to the class type
Jednakże, nie można korzystać z tej formy podczas deklarowania konstruktora, więc kompilator jest źle przyjąć ten kod. Specyfikacja deklaracji konstruktorów (w C++ 11 12.1/1) dopuszcza tylko nazwę klasy, a nie spreparowany specyfikator typu.
Generalnie nie powinieneś się dziwić, gdy Visual C++ kompiluje wszystkie rodzaje kodów. Jest znany z niestandardowych rozszerzeń tego języka.
Nie kompiluje się dla mnie z G ++ 4.8. Ale kompilator MS vs2010 to akceptuje. Pachnie jak dziwny błąd parsowania. Z jakiego kompilatora korzystasz? – SteveLove
[tag: Visual-C++], kompilator MS. Przepraszam, muszę to napisać przy opisie. –
Dlaczego spadki? Pytanie jest poprawne i rzeczywiście kompiluje się w VC++ (przynajmniej VC++ 2010) bez ostrzeżeń. Brak znajomości odpowiedzi nie jest powodem do zgonu. To nie jest zgodne ze standardem. – Gorpik