4.11.3a Estructuras anónimas
Nota: características como las descritas a continuación, que no son estándar del lenguaje, sino particularidades de algunos compiladores, son desaconsejables.
§1 Presentación
El ANSI C++ permite solamente estructuras anónimas que declaren un objeto (como en &3
), pero el compilador Borland C++ permite varios tipos
de estructuras anónimas que extienden el ANSI (que no declaren un objeto, como en &2
).
Estas estructuras anónimas tienen la siguiente forma:
struct { lista-de-miembros };
&2 Estas estructuras anónimas deben ser anidadas, es decir, declaradas dentro de
otra clase (clase, estructura o unión) por ejemplo:
struct my_struct {
int x;
struct { // estructura anónima anidada en my_struct
int i;
};
inline int func1(int y);
} ;
&3 La estructura externa debe estar identificada, es decir, tener un nombre (como
en el ejemplo anterior) o declarar un objeto como en el ejemplo que sigue (también pueden tener ambas cosas):
struct {
int x;
struct { // estructura anónima anidada en my_struct
int i;
};
inline int func1(int y);
} S;
&4 Puesto que no existe variable de instancia, la sintaxis C++ para las
estructuras anónimas no pueden referenciar el puntero this
( 4.11.6). Por consiguiente, mientras
que las estructuras C++ tienen generalmente funciones miembro, las anónimas no pueden tenerlas (solo pueden tener datos). Estos
datos (propiedades) pueden ser accedidos directamente, dentro del ámbito en que la estructura ha sido declarada, sin utilizar
la sintaxis x.y o p->y.
Ejemplo
#include <iostream>
using namespace std;
struct my_struct {
int x;
struct{ // estructura anónima anidada
int i;
};
int func1(int y) {return y + i + x;}
} S;
int main() { // ================
S.x = 6;
S.i = 4; // Observe este acceso al miembro i
int y = S.func1(3);
cout << "y == " << y << endl;
return 0;
}
Salida:
y == 13