Pregunta

un poco de una pregunta básica, pero tengo dificultades para rastrear una respuesta definitiva.

¿Es la forma inicializadora de la forma solo para inicializar los campos de clase en C ++, aparte de la asignación en los métodos?

En caso de que esté usando la terminología incorrecta, 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, ¿hay una buena manera de inicializar un campo de estructura con un inicializador de estructura?Por ejemplo:

struct MyStruct { int Number, const char* Text };

MyStruct struct1 = {};  // acceptable: zeroed
MyStruct struct2 = { 47, "Blah" } // acceptable

class MyClass
{
    MyStruct struct3 = ???  // not acceptable
};

¿Fue útil?

Solución

en C ++ X0 La segunda forma debería funcionar también.

¿Es la inicializadora enumera la única manera de inicializar los campos de clase en C ++?

En su caso con su compilador: si.

Otros consejos

Los miembros estáticos pueden ser inicializados de manera diferente:

class Test {
    ....
    static int x;
};

int Test::x = 5;

No sé si llamas a esto 'NICE', pero puede inicializar a los miembros de la estructura de manera bastante limpia, así:

struct stype {
const char *str;
int val;
};

stype initialSVal = {
"hi",
7
};

class Test {
public:
    Test(): s(initialSVal) {}
    stype s;
};

Solo para mencionar que en algunos casos, no tiene más remedio que usar las listas de inicializador para establecer el valor de un miembro en la construcción:

class A
{
 private:

  int b;
  const int c;

 public:

 A() :
  b(1),
  c(1)
 {
  // Here you could also do:
  b = 1; // This would be a reassignation, not an initialization.
        // But not:
  c = 1; // You can't : c is a const member.
 }
};

La forma recomendada y preferida es inicializar todos los campos en el constructor, exactamente como en su primer ejemplo.Esto es válido también para estructuras.Vea aquí: Inicialización de la estructura estática TM en una clase

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top