Struktur ohne Namen
-
Warum soll das nicht möglich sein? Der Name dient dem Programmierer zur Identifikation von Strukturen. Wenn die Struktur nicht mehr als Typ gebraucht wird, braucht man auch keinen Namen. Ist so ähnlich wie enum {..};, wo der Name des Enums auch keine Rolle spielt.
-
Dummkopf schrieb:
Meine gestellte Frage lautete aber anders. Ich frage mich, warum das überhaupt möglich ist.
Ein C++ Parser müsste das akzeptieren auch wenn es Unsinn ist, weil Du nie ein objekt anlegen kannst
-
Es ist natürlich nicht möglich, der Compiler wird dieser Struktur einen Namen geben, ich glaube VS gibt dem solche Namen wie _unnamed634 oder wie auch immer.
Der vorige Poster hat auch gesagt, warum man das machen kann.
Üblicher ist es aber, den Typen irgendwie zu sichern, so:struct Foo { int a; };oder so:
typedef struct { int a; } foo;Unnamed findet aber besonders bei Namespaces Bedeutung:
namespace { int a; } // entspricht namespace _unnamed434 { int a; } using namespace _unnamed434;Das braucht man z.B. dann, wenn man mal in C++ globale Variablen braucht, die using-Direktive macht es nur für diese Datei zugreifbar, in anderen nicht. Ein schöner Ersatz für static.
(ich schweife ab...)
-
general bacardi schrieb:
Dummkopf schrieb:
Meine gestellte Frage lautete aber anders. Ich frage mich, warum das überhaupt möglich ist.
Ein C++ Parser müsste das akzeptieren auch wenn es Unsinn ist, weil Du nie ein objekt anlegen kannst
Das ist schon eher Unsinn
Wenn ein C++-Compiler so ein Konstrukt akzeptiert, hat das auch meist seinen Sinn. Und dass man damit Objekte anlegen kann wurde ja schon gezeigt. Ich benutze sowas z.B. als lokale Klasse, wenn ich einmalig einen Comparator für STL-Algorithmen brauche:vector<Element>::const_iterator findWeirdElement(vector<Element> const& vec) { struct { bool operator()(Element const& e) {return e.isWeird();} } tempPredicate; return std::find_if(vec.begin(), vec.end(), tempPredicate); }Ist hier etwas konstruiert aber sowas ist tatschlich manchmal ganz nützlich.
-
gibts eigtl irgend nen weg namenlosen structs nen ctor zu geben?
iwann hatte ich ma nen fall, wo das praktisch gewesen wäre ^^bb
-
pumuckl schrieb:
general bacardi schrieb:
Dummkopf schrieb:
Meine gestellte Frage lautete aber anders. Ich frage mich, warum das überhaupt möglich ist.
Ein C++ Parser müsste das akzeptieren auch wenn es Unsinn ist, weil Du nie ein objekt anlegen kannst
Das ist schon eher Unsinn

Ich meinte so
struct // Hier steht nichts { int iWert; } /* Hier steht nichts */ ;Das lässt sich kompilieren aber ist sinnlos
Warum es möglich ist? Weil es nicht gegen die Syntaxregeln von C++ verstößt
Auch dasint i = (1,2);ist sinnlos aber kompiliert. Ich meine die 1 vor dem Komma.
-
unskilled schrieb:
gibts eigtl irgend nen weg namenlosen structs nen ctor zu geben?
iwann hatte ich ma nen fall, wo das praktisch gewesen wäre ^^Nein, aber für sowas gibts die Aggregat-Initialisierungsliste aus dem guten alten C.

struct { int i; float f; } var = {2, 3.1415f};
-
Nexus schrieb:
unskilled schrieb:
gibts eigtl irgend nen weg namenlosen structs nen ctor zu geben?
iwann hatte ich ma nen fall, wo das praktisch gewesen wäre ^^Nein, aber für sowas gibts die Aggregat-Initialisierungsliste aus dem guten alten C.

struct { int i; float f; } var = {2, 3.1415f};jopp - wollt ich aber nich nehmen - war ne größere klasse wo iwie iwas zusammengehangen hat, glaub ich - is scho wieder viel zu lang für mein nicht ganz perfektes gedächtnis her : D
-
passt sehr zum thema... jungs
ich weis nicht, bin mir nicht sicher aber werden nicht unbekannte enums als konstanten quasi in klassen benutzt?
für z.b. arrays
oder in der meta programmierung?für sowas könnte man das doch auch verwenden
-
Skym0sh0 schrieb:
ich weis nicht, bin mir nicht sicher aber werden nicht unbekannte enums als konstanten quasi in klassen benutzt?
Ja, werden sie.
-
Kann man nun meine Struktur(s. erster Beitrag des Threads) verwenden? Wenn man diese nicht verwenden kann, warum ist es dann überhaupt möglich das zu kompilieren?

-
Dummkopf schrieb:
Kann man nun meine Struktur(s. erster Beitrag des Threads) verwenden? Wenn man diese nicht verwenden kann, warum ist es dann überhaupt möglich das zu kompilieren?

Ja, geht:
struct A { char* b; }; int main() { struct A a = {"a"}; cout << a.b; //...
-
Dummkopf schrieb:
Kann man nun meine Struktur(s. erster Beitrag des Threads) verwenden? Wenn man diese nicht verwenden kann, warum ist es dann überhaupt möglich das zu kompilieren?

Warum ist es möglich, das zu kompilieren?!!
int main() { int i = 0; }Der Compiler muss einen ja nicht immer bevormunden (tut er oft genug).
-
@verwend0r: Du hast mich wohl falsch verstanden! Schau dir mal den ersten Beitrag von mir an.

-
Natürlich kannst du das Objekt verwenden???
struct { int a; } a; a.a = 10; // Sinnlos: struct { char b; };
-
Wollt ihr den ersten Beitrag eigentlich nicht lesen?

Dummkopf schrieb:
struct { int iWert; }/*hier steht nix!!!!111einseinself*/;Die Struktur hat weder einen Namen noch wird ein Objekt angelegt.
-
Dummkopf schrieb:
Bringt das Vor- oder Nachteile mit sich?
Nachteile, z.B: Du tippst dir nen Wolf, kannst aber nix damit anfangen.
MFG
-
> Wollt ihr den ersten Beitrag eigentlich nicht lesen?

Das kann ich eher dich fragen

Und ich sage es gerne noch mal: Es ist sinnlos!
-
wollt ihr denn den beitrag nicht lesen?

-
Skym0sh0 schrieb:
ich weis nicht, bin mir nicht sicher aber werden nicht unbekannte enums als konstanten quasi in klassen benutzt?
für z.b. arrays
oder in der meta programmierung?Ja, wobei hier auch integrale statische Konstanten funktionieren. Die sind mir persönlich auch lieber,
enumsverwende ich für Aufzählungen.Ad aCTa schrieb:
Das kann ich eher dich fragen

Naja, deine Antwort "Natürlich kannst du das Objekt verwenden???" war etwas missverständlich, zumal kein Objekt da war. Aber das sollte jetzt klar sein.