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

Как по умолчанию инициализировать массив элементов в C++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"};

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

1 ответ

Решение

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

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

class Example {
    auto i = 4;
};
Другие вопросы по тегам