Domanda

Un po 'di una domanda di base, ma sto avendo difficoltà a rintracciare una risposta definitiva.

Inizializzatore sono elenchi di Inizializzatore il modo per inizializzare i campi di classe in C ++, a parte l'assegnazione dei metodi?

Nel caso in cui sto usando la terminologia sbagliata, ecco cosa intendo:

class Test
{
public:
    Test(): MyField(47) { }  // acceptable
    int MyField;
};

class Test
{
public:
    int MyField = 47; // invalid: only static const integral data members allowed
};
.

Modifica : In particolare, c'è un bel modo per inizializzare un campo Struct con un Iniziatore Struct?Ad esempio:

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

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

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

È stato utile?

Soluzione

In C ++ X0 il secondo modo dovrebbe funzionare anche.

.

Inizializzatore sono elencati l'unico modo per inizializzare i campi di classe in C ++?

Nel tuo caso con il tuo compilatore: sì.

Altri suggerimenti

I membri statici possono essere inizializzati in modo diverso:

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

int Test::x = 5;
.

Non so se chiami questo 'bello', ma puoi inizializzare i membri della struttura in modo abbastanza pulito come:

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

stype initialSVal = {
"hi",
7
};

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

Solo per menzionare che in alcuni casi, non hai altra scelta che utilizzare gli elenchi di inizializzazione per impostare il valore di un membro sulla costruzione:

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.
 }
};
.

Il modo consigliato e preferito è di inizializzare tutti i campi nel costruttore, esattamente come nel tuo primo esempio.Questo è valido anche per strutture.Vedi qui: Inizializzazione della struttura statica TM in una classe

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top