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 goto
etiqueta.
void f() {
class: sample {
// there were some members declared here
} x;
}
sample
?goto
etiqueta? Correcto,goto
la 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*
, perosample
es una clase base inaccesible aquí).Creo que eso es definir una clase sin nombre que se deriva de
sample
. Yx
es 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é
class
astruct
por 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
sample
simplemente significa derivan delsample
uso de la herencia predeterminada . (para estructuras: público, para clases: privado)fuente