Es una pregunta básica, pero tengo dificultades para encontrar una respuesta definitiva.¿Cómo se pueden inicializar los campos de clase?
¿El inicializador enumera la forma solamente manera de inicializar campos de clase en C++, además de la asignación en métodos?
En caso estoy usando la terminología equivocada, esto es lo que quiero decir:
class Test
{
public:
Test(): MyField(47) { } // acceptable
int MyField;
};
class Test
{
public:
int MyField = 47; // invalid: only static const integral data members allowed
};
EDITAR: en particular, no es una buena manera de inicializar un campo con una estructura struct inicializador? Por ejemplo:
struct MyStruct { int Number, const char* Text };
MyStruct struct1 = {}; // acceptable: zeroed
MyStruct struct2 = { 47, "Blah" } // acceptable
class MyClass
{
MyStruct struct3 = ??? // not acceptable
};
En C++ la instancia estructura con llaves vacías normalmente no se pone a cero, pero contendrá valores de basura. Las excepciones pueden estar en un entorno de depuración o situación similarmente controlada. –
@SEinarsson - oh ... ¿tiene una referencia para eso? Las llaves vacías se recomiendan en toda la web para inicializar estructuras en C++. –
Espera, ahora no estoy tan seguro. He encontrado personas en la web que dicen que estoy equivocado, pero no hay una definición formal para el {} patrón. La siguiente pregunta implica que las clases de estructuras en C++ tienen constructores por defecto de cero, cuando se usan en un inicializador de clase (vea la segunda respuesta) http://stackoverflow.com/questions/112085/is-este-sistema-inicialización-de-estructuras- truco-seguro Simplemente ignore mi comentario anterior hasta que pueda aclarar esto. –