Mal ne Frage zum C++Standard....
-
Hi, Was entspricht dem C++ Standard:
1.:
typedef struct STRUCT { // ... };2.:
typedef struct { // ... } STRUCT;PS: Wie isses mit typedef ?
-
STD schrieb:
Hi, Was entspricht dem C++ Standard:
1.:
typedef struct STRUCT { // ... };2.:
typedef struct { // ... } STRUCT;PS: Wie isses mit typedef ?
beides ist legal (wobei im ersten das typedef überflüssig ist, weil kein typedefname deklariert wird. im zweiten fall ist STRUCT ein typedefname - das schränkt seine nutzbarkeit etwas ein.
-
camper schrieb:
beides ist legal (wobei im ersten das typedef überflüssig ist, weil kein typedefname deklariert wird. im zweiten fall ist STRUCT ein typedefname - das schränkt seine nutzbarkeit etwas ein.
"das schränkt seine nutzbarkeit etwas ein."...in wie fern ?
-
"das schränkt seine nutzbarkeit etwas ein."...in wie fern ?
-
Eigentlich gar nicht, außer der Tatsache, das du keine Vorwärtsdeklaration auf dieses Struct machen darfst.
In C++ brauchst du aber auch keins von beidem, Namen von structs sind (im Gegensatz zu C) automatisch Typnamen.
-
Zweiteres ist nicht legal. Ein struct muss immer einen Namen haben.
-
Das stimmt nicht. Allein schon aufgrund der angepeilten C-Kompatibilität. Frag deinen Compiler.
-
.filmor schrieb:
Das stimmt nicht. Allein schon aufgrund der angepeilten C-Kompatibilität. Frag deinen Compiler.
Der hat nichts dagegen, aber der hat auch nichts gegen
for( int i = 0; i < 10; ++i ); if( i == 10 );
-
Dann frag halt http://www.comeaucomputing.com/tryitout/ oder http://mingw.org/, die sind bestimmt standardkonformer als VC6 oder BCC oder was auch immer du da hast :p. Zur Not schau halt im Standard, wenn du ihn findest. Es funktioniert aber auf jeden Fall. Ein solches Struct kann aber natürlich keinen Konstruktor haben, aber ob es ein POD-Struct sein muss weiß ich nicht.
-
dragon90# schrieb:
Zweiteres ist nicht legal. Ein struct muss immer einen Namen haben.
weder noch. es sind allerdings (abgesehen von unbenannten bitfeldern) deklarationen nicht zulässig, die keine neuen namen einführen (bzw. namen redeklarieren). folgendes ist zum beispiel ill-formed:
extern int; struct {}; typedef int;das hier dagegen ist sehr wohl erlaubt:
typedef struct {} *p;hier ist die klasse selbst unbenannt. trotzdem sind das feinheiten, die man vermeiden sollte - schon um missverständnissen aus dem weg zu gehen. die definition von typen innerhalb von typedef deklarationen ist ein überbleibsel aus C, das keine echte bedeutung in C++ hat.
das wesentliche des einführens von namen wird auch deutlich, wenn man sich das hier anschaut:
int; struct S { int foo; }; struct { int foo; } s;alle drei fälle sind variablendefinitionen, aber das erste ist unzulässig (und gerade das dritte benutzt auch wieder eine unbenannte klasse). vorsicht auch vor verwechslung zwischen unbenannten und anonymen unions. zwar ist ein anonymes union immer auch unbenannt - aber umgekehrt gilt das nicht:
union { int foo; }; //anonym union { int foo; } bar; // unbenannt