Hallo zusammen, ich darf in c++ so etwas schreiben: Datei R.h static class R { public: u.s.w } oder const class R { public: u.s.w } was hat static oder const !!!vor!!! der Klassen Deklaration für Auswirkungen? Ich finde hierzu nichts, vielleicht weiß jemand auf die schnelle was der Standard dazu sagt? Danke Gruß EC
Welche C Version / Compiler ist das denn? Ich kenne das zumindest nicht. Was ich kenne ist:
1 | const class Foo { } foo ; |
2 | static class Foo { } foo ; |
Dabei beziehen sich const/static auf die Instanz, nicht auf die Klassendefinition.
:
Bearbeitet durch User
S. J. schrieb: > const class Foo { } foo ; das zumindest kracht dann, wenn du versuchst eine Methode von Foo aufzurufen. Die will dann nämlich ein const this als ersten parameter haben und übergeben wird nur this. static sollte die Sichtbarkeit der Klasse auf die Datei beschränken. Das const ist IMHO Blödsinn.
S. J. schrieb: > Was ich kenne ist:const class Foo { } foo ; > static class Foo { } foo ; Das kenne ich auch..... Beim Visual Studio2013 geht es, ich glaube das kommt von C11 oder C14 Standard? Bei C# darf ich ja (oder muss) man ja public static class bei static Methoden schreiben....
nicht"Gast" schrieb: > static sollte die Sichtbarkeit der Klasse auf die Datei beschränken. Das würde ich auch so sehen, aber müsste const class R kein Fehler geben?
Zu
1 | const struct foo{ |
2 | void bar(){ |
3 | }
|
4 | }bar; |
5 | |
6 | int _tmain(int argc, _TCHAR* argv[]) |
7 | {
|
8 | bar.bar(); |
9 | return 0; |
10 | }
|
sagt beim VS2013 beim compilieren: Error 1 error C2662: 'void foo::bar(void)' : cannot convert 'this' pointer from 'const foo' to 'foo &' und das klingt erst mal logisch. Wenn man bar.bar() nicht aufruft, gibts auch nichts zu meckern.
nicht"Gast" schrieb: > S. J. schrieb: >> const class Foo { } foo ; > > das zumindest kracht dann, wenn du versuchst eine Methode von Foo > aufzurufen. Die will dann nämlich ein const this als ersten parameter > haben und übergeben wird nur this. Ich bin mir nicht sicher was du meinst. Vielleicht möchtest du das umformulieren? ;-) Bezeichnen wir tatsächlich mal den Pointer auf die Instanz als den ersten "Parameter" einer Methode, dann muss der sicherlich const in diesem Fall sein. Und das funktioniert grundsätzlich auch wunderbar mit const Methoden. Edit: Kleine Hilfestellung zur const Methode:
1 | void bar() const {} |
:
Bearbeitet durch User
nicht"Gast" schrieb: > Error 1 error C2662: 'void foo::bar(void)' : cannot convert 'this' > pointer from 'const foo' to 'foo &' das macht mein Visual Studio 2013 auch :-) const class R : u.s.w gibt es keinen Fehler !!!
S. J. schrieb: > Ich bin mir nicht sicher was du meinst. Vielleicht möchtest du das > umformulieren? ;-) Siehe ein Beitrag später :) Wenn ich mir das so noch mal durchlese. Wer hat denn diesen wirren Kram geschrieben. Ich was das nicht ;).
Hallo Fremder, EC schrieb: > ich darf in c++ so etwas schreiben: Mein Compiler sagt, dass ich das nicht darf. Warum darfst Du das? ;-) Wenn neben dem Typen auch noch ein Objekt definiert wird, dann würde das Sinn ergeben (und natürlich kann man Funktionen auf Konstanten aufrufen, aber eben nur die, die einen const-Qualifier haben). mfg Torsten
Ok ich darf auch jetzt auch: const static const const const class R schreiben ich glaube das hier bei meinem Compiler was nicht stimmt :-) Wir belassen es dabei "dass ich das nicht darf" und jetzt ist Freitag :-) schönes Wochenende
EC schrieb: > Ok ich darf auch jetzt auch: > > const static const const const class R dann darfst Du bestimmt auch:
1 | const static volatile class R{}; |
> schönes Wochenende
Danke, Dir auch! ;-)
EC schrieb: > Torsten R. schrieb: >> const static volatile class R{}; > > Ja, darf ich :-) oh man ?!?!??! Schreiben darf ich das auch. Ich sollte nur nicht erwarten, daß der Compiler auch was damit anfangen kann. nicht"Gast" schrieb: > Wenn ich mir das so noch mal durchlese. Wer hat denn diesen wirren Kram > geschrieben. Ich was das nicht ;). Das sag ich mir auch immer, wenn ich mir meinen Code von vor 5 Jahren anschaue.
1 | const struct foo_t |
2 | {
|
3 | int x; |
4 | void bar(){ x = 10; } |
5 | };
|
gcc 5.2 kompiliert das nicht: error: qualifiers can only be specified for objects and functions clang 3.7 liefert warnungen !!warning: 'const' is not permitted on a declaration of a type [-Wmissing-declarations]
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.