Ich habe es noch nie gesehen. Ich dachte, es wäre ein Tippfehler für ":: sample", aber als ich sah, dass es tatsächlich kompiliert wurde, war ich sehr verwirrt. Kann mir bitte jemand helfen, es herauszufinden? Ich denke nicht, dass es ein goto
Label ist.
void f() {
class: sample {
// there were some members declared here
} x;
}
sample
?goto
Label? Richtig,goto
die Spitze derclass
!Antworten:
Es ist eine unbenannte Klasse, und der Doppelpunkt bedeutet, dass sie privat erbt
sample
. Sehen Sie es wieclass Foo : private sample { // ... }; Foo x;
quelle
sample*
, ist abersample
hier eine unzugängliche Basisklasse).Ich denke, das definiert eine unbenannte Klasse , die von abgeleitet ist
sample
. Undx
ist eine Variable dieser unbenannten Klasse.struct sample{ int i;}; sample f() { struct : sample { // there were some members declared here } x; x.i = 10; return x; } int main() { sample s = f(); cout << s.i << endl; return 0; }
Beispielcode bei ideone: http://www.ideone.com/6Mj8x
PS: Ich
class
habestruct
aus Gründen der Barrierefreiheit zu gewechselt !quelle
Das ist eine unbenannte Klasse.
Sie können sie beispielsweise verwenden, um lokale Funktionen in Pre-C ++ 11 zu ersetzen:
int main() { struct { int operator() (int i) const { return 42; } } nice; nice(0xbeef); }
Der Doppelpunkt, gefolgt von
sample
einfachen Mitteln, leitet sich aus dersample
Verwendung der Standardvererbung ab . (für Strukturen: öffentlich, für Klassen: privat)quelle