Как по умолчанию инициализировать массив элементов в 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»};
Почему же компилятор не может вывести границы, как обычно, для определения локального массива с использованием агрегатной инициализации?
Инициализатор членов по умолчанию — это просто — по умолчанию. Это всегда допускает возможность того, что конструктор предоставит другое значение. num2letter
потенциально может быть инициализирован из одного из Example
конструкторы, в этот момент инициализатор по умолчанию даже не будет использоваться … поэтому тип должен быть явно указан. Декларация должна быть действительной с нашим без инициализатора.
Это та же самая причина, по которой вы не можете сделать что-то вроде:
class Example {
auto i = 4;
};
Других решений пока нет …