Kompilowałem program C++ w Cygwin używając g ++ i miałem klasę, której konstruktor nie miał argumentów. Miałem linie:Czy nawiasy w konstruktorze bez argumentów są standardem językowym?
MyClass myObj();
myObj.function1();
A kiedy próbuje go skompilować, mam komunikat:
błąd: wniosek o członka „Function1” in „myObj”, która jest typu non-klasa „MojaKlasa()() ''
Po drobnych badaniach odkryłem, że poprawka miała zmienić pierwszą linię na MyClass myObj;
Mogę przysiąc, że wcześniej wykonałem puste deklaracje konstruktorów z nawiasami w C++. Czy jest to prawdopodobnie ograniczenie używanego przeze mnie kompilatora, czy też rzeczywiście standard językowy nie używa nawiasów dla konstruktora bez argumentów?
Aby rozwinąć - to tylko problem w niektórych kontekstach. Napisz "throw myexceptionclass();", na przykład, i nie ma zamieszania. Język jest niejednoznaczny w kontekście Petesa, ale ujednoznacznienie reguł (powód, dla którego język ściśle nie jest tak naprawdę niejednoznaczny) wybiera jedną interpretację. Oczywiście reguły ujednoznaczniające oznaczają, że język nie jest tak naprawdę niejednoznaczny - ale parsujący eksperci twierdzą, że tak jest, więc mam też prawo! Najczęstsze reguły ujednoznaczniające w wielu językach dotyczą priorytetów operatorów i ich asocjacji - C i C++ są znacznie bardziej niejednoznaczne, co powoduje pewne dziwne problemy. – Steve314