Как можно инициализировать поля класса?

Немного простой вопрос, но мне сложно найти окончательный ответ.

Являются ли списки инициализатора единственным способом инициализации полей класса в C++, кроме присваивания в методах?

В случае, если я использую неправильную терминологию, вот что я имею в виду:

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

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

РЕДАКТИРОВАТЬ: в частности, есть хороший способ инициализировать поле структуры с помощью инициализатора структуры? Например:

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

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

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

4 ответа

Решение

В C++x0 должен работать и второй путь.

Являются ли списки инициализатора единственным способом инициализации полей класса в C++?

В вашем случае с вашим компилятором: Да.

Статические члены могут быть инициализированы по-разному:

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

int Test::x = 5;

Я не знаю, если вы называете это "хорошо", но вы можете инициализировать элементы структуры довольно чисто, например, так:

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

stype initialSVal = {
"hi",
7
};

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

Просто отметим, что в некоторых случаях у вас нет другого выбора, кроме как использовать списки инициализаторов для установки значения элемента в конструкции:

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

Рекомендуемый и предпочтительный способ - инициализировать все поля в конструкторе, как в первом примере. Это справедливо и для структур. Смотрите здесь: Инициализация статической структуры TM в классе

Другие вопросы по тегам