Nunca lo había visto antes. Pensé que era un error tipográfico para ":: sample", pero cuando vi que en realidad se compila, estaba muy confundido. ¿Alguien puede ayudarme a averiguarlo, por favor? No creo que sea una gotoetiqueta.
void f() {
class: sample {
// there were some members declared here
} x;
}

sample?gotoetiqueta? Correcto,gotola parte superior delclass!Respuestas:
Es una clase sin nombre y los dos puntos significan que hereda de forma privada
sample. Verlo comoclass Foo : private sample { // ... }; Foo x;fuente
sample*, perosamplees una clase base inaccesible aquí).Creo que eso es definir una clase sin nombre que se deriva de
sample. Yxes una variable de esa clase sin nombre.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; }Código de muestra en ideone: http://www.ideone.com/6Mj8x
PD: ¡Cambié
classastructpor motivos de accesibilidad!fuente
Esa es una clase sin nombre.
Puede usarlos, por ejemplo, para sustituir funciones locales en pre-C ++ 11:
int main() { struct { int operator() (int i) const { return 42; } } nice; nice(0xbeef); }Los dos puntos seguidos de
samplesimplemente significa derivan delsampleuso de la herencia predeterminada . (para estructuras: público, para clases: privado)fuente