programacion objetos net internas clases anidados anidadas c++ class c++11 g++ c++14

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.