Fehler in der Programmiersprache C++ ?
-
Hallo zusammen,
Mir ist folgendes aufgefallen:
//irgwas.h class CDemo { private: // ... public: CDemo(void); // Standardkonstruktor CDemo(int iVal); // Standardkonstruktor ~CDemo(void); // Destruktor // ... }; // irgwas.cpp CDemo::CDemo(void) { } CDemo::CDemo(int iVal = 0) { } CDemo::~CDemo(void) { } // ...Bei einem Objekt wie:
CDemo cTest();ist nicht klar welcher Konstruktor aufgerufen wird, oder ?

-
TheBigQ schrieb:
Bei einem Objekt wie:
CDemo cTest();ist nicht klar welcher Konstruktor aufgerufen wird, oder ?

Da wird kein Objekt erzeugt. Dein Compiler sieht das als Funktionsdeklaration.
-
ich sehe kein objekt hier
-
Der Compiler müsste dir ne Fehlermeldung bringen, wenn du nicht noch zufällig eine ctest() Funktion irgendwo hast.
Deshalb instanziert man das CDemo-Objekt ohne Klammern, wenn man den Std-Ctor meint:
CDemo cTest;
-
ich meine es gibt keinen fehler von seiten des compilers
ich finde es aber extrem schlecht, dass man keine klammern setzt, wenn man vorher mit java gearbeitet hat, dann fragt man sich natülich warum das nicht geht, dass sollte man doch mal im neuen standard ändern
-
steff3 schrieb:
ich meine es gibt keinen fehler von seiten des compilers
ich finde es aber extrem schlecht, dass man keine klammern setzt, wenn man vorher mit java gearbeitet hat, dann fragt man sich natülich warum das nicht geht, dass sollte man doch mal im neuen standard änderndann wäre es allerdings nicht möglich, funktionen ohne parameter zu deklarieren, ohne void zu benutzen. die mehrdeutigkeit der grammatik hier ist folge der C kompatibilität. letztlich ist das ein problem, über das man ein mal stolpert und dann nie wieder. was java dazu zu sagen hat, ist im übrigen eher irrelevant. im zweifelsfall kann man immer noch
CDemo cTest = CDemo();schreiben, und auf copy-elision vertrauen (das macht nun heutzutage wirklich jeder compiler). im falle von PODs könnte man noch auf aggregat-initialisierungslisten ausweichen.
-
steff3 schrieb:
ich meine es gibt keinen fehler von seiten des compilers
ich finde es aber extrem schlecht, dass man keine klammern setzt, wenn man vorher mit java gearbeitet hat, dann fragt man sich natülich warum das nicht geht, dass sollte man doch mal im neuen standard ändernWow, das wären aber krasse Kreuzabhängigkeiten, wenn jede Sprache immer darauf achten müsste, was jede andere Sprache so macht oder nicht macht.
-
Vorallem, warum soll sich C++ nach Java richten?
Warum ändern die Java-Leute nicht einfach ihren "Standard"?
Naja, kann jemand diesen Thread schliessen? Sonst gibts wieder Flamewars. 
-
Artchi schrieb:
Vorallem, warum soll sich C++ nach Java richten?
Warum ändern die Java-Leute nicht einfach ihren "Standard"?
Naja, kann jemand diesen Thread schliessen? Sonst gibts wieder Flamewars. 
Wohl war
...nur du hast damit ja schon den Anfang gemacht 
-
Thema geschlossen. Driftet zu sehr ab.