В инициализаторе класса по умолчанию для члена массива 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;
};