Как классические поля могут быть инициализированы?

StackOverflow https://stackoverflow.com/questions/3264597

Вопрос

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

- это инициализаторы перечислены только , чтобы инициализировать поля классов в C ++, кроме назначения в методах?

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

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

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

EDIT : в частности, есть ли хороший способ инициализации полей структуры с инициализатором структуры?Например:

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

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

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

Это было полезно?

Решение

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

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

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 в классе

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top