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

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

0

Решение

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

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

class Example {
auto i = 4;
};
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]