c++ static class R oder const class R ?

Gast #4348215
Lesenswert?

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
Gast #4348256
Lesenswert?

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.
Gast #4348260
Lesenswert?

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....
Gast #4348273
Lesenswert?

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.
#4348276
Lesenswert?

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 {}
(Firma: Torrox.de) #4348301
Lesenswert?

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
Gast #4348330
Lesenswert?

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
#4348993
Lesenswert?

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.
Gast #4350019
Lesenswert?

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]

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren