estructural - typedef c++
C++: ¿Cuándo debería usar structs en lugar de clases y dónde están las diferencias de velocidad? (5)
1) No existe una diferencia real entre los 2 que no sea el hecho de que los miembros de la estructura son, por defecto, públicos, donde las clases son privadas.
2) No es EXACTAMENTE lo mismo.
Editar: tenga en cuenta que puede usar herencia virtual con estructuras. Ellos son TAN idénticos :)
¿Cuándo debería usar una
struct
lugar de una clase? Actualmente estoy usando clases para todo, desde envoltorios de texturas OpenGL hasta fuentes de mapas de bits.¿Es una clase que uso simplemente como una
struct
(sin uso de herencias, polimorfismo, etc.) aún más lenta que unastruct
?
En lugar de rebajar y referirme a otras preguntas, volveré a repetir lo que otros dijeron antes de agregarlos.
struct
y class
son idénticos en C ++, la única excepción es que struct
tiene un acceso predeterminado de public
, y class
tiene un acceso predeterminado de private. El soporte de características de rendimiento e idioma son idénticos.
Idiomáticamente, sin embargo, struct
se usa principalmente para clases "tontas" (plain-old-data). class
se usa más para encarnar una verdadera clase.
Además, también he utilizado struct
para objetos de función definidos localmente, tales como:
struct something
{
something() : count(0) { }
void operator()(int value) { std::cout << value << "-" << count++ << "/n"; }
int count;
} doSomething;
std::vector<int> values;
...
std::foreach(values.begin(); values.end(); doSomething);
Las estructuras y las clases en C ++, como sabrá, difieren únicamente por su nivel de acceso predeterminado (y la accesibilidad predeterminada de sus bases: public for struct, private for class).
Algunos desarrolladores, incluido yo mismo, preferimos usar estructuras para POD-types de POD-types , es decir, con estructuras de estilo C, sin funciones virtuales, bases, etc. Las estructuras no deben tener un comportamiento, son solo un conjunto de datos colocados en un objeto.
Pero eso es, naturalmente, una cuestión de estilo, y obviamente ninguno de los dos es más lento
Me gusta usar clases cuando necesito tener un destructor explícito. Porque entonces, debe seguir la regla de tres, en cuyo caso debe escribir un constructer de copia y un overloader de asignación. Con todo esto, parece más natural usar una clase que una estructura.
como otros han explicado, son lo mismo excepto por los niveles de acceso predeterminados.
la única razón por la cual las clases pueden percibirse como más lentas es porque un buen estilo (pero no el único) es el que menciona ArmenTsirunyan : struct
para los tipos de POD, class
para las clases de objetos en toda regla. Los últimos generalmente incluyen herencia y métodos virtuales, por lo tanto, vtables, que son un poco más lentos para llamar que las funciones directas.