Strichpunkt nach Klassendeklaration Klammern
In C++ - Klassen, warum Sie das Semikolon nach der schließenden Klammer? Ich regelmäßig vergessen Sie es und Holen Sie sich compiler-Fehler, und damit Zeit verloren. Scheint etwas überflüssig für mich, die wohl kaum der Fall sein. Tun Menschen wirklich Dinge tun, wie:
class MyClass
{
.
.
.
} MyInstance;
Bekomme ich es von einem C-Kompatibilität Sicht für structs und enums, aber da Klassen sind nicht Teil der Sprache C ich denke, es ist vor allem dort der Konsistenz zwischen ähnlichen Erklärung Konstrukte.
Was ich suchte war mehr in Bezug auf design Begründung eher, als dass Sie in der Lage, etwas zu ändern, obwohl eine gute code-Vervollständigung der IDE könnte trap diese vor der Kompilierung.
danke für den link. Aus einer historischen Perspektive ist es sinnvoll, und wenn C++ erlaubt es, alle C-grammer-und C++ - Klassen sind gleichbedeutend mit Strukturen, wir sind mit dem notwendigen Semikolon am Ende der Klasse.
yup ernste Frage. Ich bin mir wohl bewusst, ich habe mit ihm zu Leben, aber ich neugierig auf die Beweggründe hinter dem design und der Implementierung.
Okay, aber du solltest vielleicht Bearbeiten Sie Ihre Frage, Sie wollte hinausgehend. Wie es ist, es ermutigt die Menschen, Fragen zu stellen wie "warum die geschweifte Klammer"? 🙂 Sie können daran interessiert sein, Lesen Stroustrup ' s Design & Entwicklung von C++, obwohl es deckt gewichtigeren Angelegenheiten als die Semikolons am Ende der Klassen.
fair genug, und es war grenzwertig, ob oder nicht, um wiki. Die Frage, gefragt wurde nach dem Ausscheiden aus einem semi-colon in einem regelmäßig verwendeten header in einen großen bauen. Es kostete mich eine halbe Stunde, damit der Besuch SO. Frage bearbeitet, wie pro Ihre Anregung.
InformationsquelleAutor SmacL | 2009-04-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Semikolon nach der schließenden Klammer, in einer Typ-Deklaration ist erforderlich, die durch die Sprache. Es war auf diese Weise seit den frühesten Versionen von C.
Und ja, Menschen tun in der Tat nicht die Erklärung, die Sie nur dort. Es ist nützlich für die Erstellung von bereichsbezogenen Typen innerhalb von Methoden.
In diesem Fall, ich denke, es ist klar, warum das Semikolon benötigt. Warum ist es nötig, in der mehr Allgemeine Fall die Deklaration in der header-Datei bin ich mir unsicher. Meine denke ist, dass es historische und getan wurde, um das schreiben der compiler einfacher.
können Sie beides tun. Siehe das Beispiel habe ich Hinzugefügt
Es ist auch verwendet werden, um Strukturen als Teil einer union.
InformationsquelleAutor JaredPar
Den link zur Verfügung gestellt von @MichaelHaren erscheint zu bieten die Ursache. Das Semikolon (wie andere haben darauf hingewiesen) ist geerbt von C. Aber nicht erklären, warum C dient es in den ersten Platz. Die Diskussion beinhaltet dieses Juwel ein Beispiel:
Älteren Versionen von C musste eine implizite int-Rückgabetyp einer Funktion, sofern nicht anders deklariert ist. Wenn wir weglassen die
;
am Ende der Struktur-definition, das wir nicht nur die Definition einer neuen Artfred
, aber auch erklärt, dassmain()
retourniert eine Instanz vonfred
. I. e. würde der code analysiert werden, wie diese:InformationsquelleAutor Nathan
Ich denke, es ist, denn die Kurse sind Erklärungen, auch wenn Sie müssen Klammern zur Gruppierung. Und ja, es ist das historische argument, dass in C könnte man tun
sollten Sie in C++ in der Lage sein, etwas ähnliches tun, ist es sinnvoll, für die
class
Erklärung in der gleichen Weise Verhalten.InformationsquelleAutor unwind
Es ist die Abkürzung für
Das Semikolon nach der geschweiften Klammer der Klassendeklaration ist eigentlich übertrieben, aber es ist wie C++ definiert ist. Das Semikolon hinter der Deklaration der Variablen ist immer notwendig und sinnvoll.
Beachten Sie, dass, auf diese Weise, Sie können nicht erstellen Sie ein Objekt einer anonymen Klasse, während Sie die anderen Weg.
InformationsquelleAutor Stefan Steinegger
Benutze ich nicht solche Erklärungen
Aber in diesem Fall kann ich verstehen, warum Strichpunkt.
Denn es ist wie
int a;
- Deklaration von Variablen.Wohl für die Konsistenz, da kann man auch weglassen 'MyInstance' Semikolon bleibt dort.
InformationsquelleAutor Mykola Golubyev
Es ist erforderlich, nachdem eine
struct
aus Gründen der Kompatibilität, und wie würdest du diese:namespace myNamespace { ... } // inconsistent but valid
?InformationsquelleAutor Zifre
In C/C++; ist eine Anweisung terminator.
Alle Anweisungen enden mit ; um Unklarheiten zu vermeiden (und zur Vereinfachung der Analyse).
Die Grammatik ist in dieser Hinsicht konsequent.
Obwohl der Deklaration einer Klasse (oder beliebiger block)
ist mehrere Zeilen lang und wird
abgegrenzt mit {} ist, noch ist es einfach eine Anweisung ({ } Teil der Aussage)
daher muss beendet werden mit ; (; ist nicht ein separator/delimitor)
In deinem Beispiel
ist die gesamte Anweisung.
Man könnte definieren, mehrere Instanzen der angegebenen Klasse in einer einzigen Anweisung
Dies ist völlig im Einklang mit der Deklaration mehrere Instanzen von einem primitiven Typ in einer einzigen Anweisung:
Der Grund, warum man Sie oft nicht sehen, wie desclaration von Klasse und Instanz ist die Instanz könnte ?nur??? eine Globale variable, und Sie nicht wirklich wollen oft Globale Objekte, es sei denn, Sie sind statisch und/oder Plain Old Daten-Strukturen.
InformationsquelleAutor Roger Nelson