objetos - ¿Es posible usar clases anónimas en C++?
objetos anidados c# (3)
En C ++, una unión anónima es una unión de esta forma:
union { ... } ;
Define un objeto sin nombre de un tipo sin nombre. Sus miembros se inyectan en el ámbito circundante, por lo que uno puede referirse a ellos sin utilizar un <object>.
Prefijo que de lo contrario sería necesario.
En este sentido, no existen clases anónimas (que no sean uniones --- en C ++ uniones son clases).
Por otro lado, las clases sin nombre (incluyendo estructuras y uniones) no son nada inusuales.
union { ... } x;
class { ... } y;
typedef struct { ... } z;
y
son nombres de objetos sin nombre. z
es un nombre de typedef que es un alias para una estructura sin nombre. No se les llama anónimos porque este término está reservado para la forma anterior de una unión.
[](){}
Las Lambdas son objetos sin nombre de tipos de clase sin nombre, pero tampoco se les llama anónimos.
He visto clases anónimas en código C++
en Quora. Se compila con éxito y se ejecuta.
Código aquí:
#include <iostream>
auto func()
{
class // no name
{
public:
int val;
} a;
a.val = 5;
return a;
}
int main()
{
std::cout << func().val << std::endl;
return 0;
}
Entonces, ¿es válido en C ++?
Además, tengo curiosidad por saber, ¿es posible usar clases anónimas en C ++?
No solo eso, puede crear más instancias de la clase utilizando decltype
.
#include <iostream>
class
{
public:
int val;
} a;
int main()
{
decltype(a) b;
a.val = 10;
b.val = 20;
std::cout << a.val << std::endl;
std::cout << b.val << std::endl;
return 0;
}
Salida:
10
20
Siempre fue posible escribir algo como esto:
typedef struct { int a; } type;
Ahora, si nos fijamos en la parte struct { int a }
, esta es una estructura anónima. En C ++, básicamente no hay diferencia entre estructuras y clases (excepto los modificadores de acceso predeterminados). Por lo tanto, es posible tener estructuras / clases anónimas.