В инициализаторе класса по умолчанию для члена массива С++ 11

Как по умолчанию инициализировать массив элементов в С++ 11? Кажется, я должен предоставить границу.

class Example {
    const char* num2letter[10]{" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
};

Компилируется нормально. Но если я опускаю границу, я получаю ошибку компилятора:

ошибка: слишком много инициализаторов для 'const char* [0]' const char* num2letter[]{" ", "", "abc", "def", "ghi", "jkl", "mno", "pqrs" , "tuv", "wxyz"};

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


person Rich    schedule 22.03.2016    source источник


Ответы (1)


Инициализатор члена по умолчанию — это именно то, что по умолчанию. Это всегда допускает возможность того, что конструктор предоставит другое значение. num2letter потенциально может быть инициализирован одним из конструкторов Example, после чего инициализатор по умолчанию даже не будет использоваться... поэтому тип должен быть указан явно. Объявление должно быть действительным с нашим без инициализатора.

Это та же причина, по которой вы не можете сделать что-то вроде:

class Example {
    auto i = 4;
};
person Barry    schedule 22.03.2016