Как я могу инициализировать обычную переменную-член массива в списке инициализатора? - PullRequest
2 голосов
/ 22 сентября 2011

Я бы хотел сделать следующее:

class MyClass {
    public:
        MyClass() : arr({1,2,3,4,5,6,7,8}) {}

    private:
        uint32_t arr[8];
};

, но это не работает (компилятор: ожидаемое первичное выражение перед маркером '}'.). Я смотрел на другие вопросы SO, и люди раздавали такие вещи, как std::initializer_list, и пробовали интересные вещи, такие как размещение инициализатора массива в двойных скобках, например:

MyClass() : arr( {{1,2,3,4,5,6,7,8}} ) {}

но я незнаком с целью std::initializer_list, а также я не совсем уверен, почему в приведенном выше коде есть двойные скобки (хотя он все равно не работает, поэтому я не уверен, почему это важно) .

Есть ли нормальный способ инициализации моей переменной arr в списке инициализатора конструктора?

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

Ваш синтаксис правильный.В качестве альтернативы вы можете сказать arr{1,2,3,...}.

Скорее всего, ваш компилятор пока не поддерживает эту конструкцию.GCC 4.4.3 и 4.6.1 оба делают (с -std=c++0x).

1 голос
/ 23 сентября 2011

Отлично работает на GCC 4.5.2 с -std = gnu ++ 0x. Я получаю предупреждение и зависание с -std = c ++ 98.

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