C++ zero init массив шаблонов с переменной длиной массива

Есть ли способ обнулить инициализацию массива любого типа с переменным размером? Итак, я хочу применить что-то вроде этого:

int results[5] = {};

к такому шаблону:

T results[i] = {};

Когда я пытаюсь это сделать, мой компилятор говорит следующее: 'results' declared as array of functions of type 'T ()'. Когда я использую любое фиксированное имя типа, я получаю эту ошибку:Variable-sized object may not be initialized

Также i - это переменная, которая передается при вызове этой функции.

1 ответ

Решение

Массивы переменной длины нестандартны в C++, и ваш компилятор поддерживает их как расширение. Ваш компилятор также сообщил вам об ограничениях расширения: массив переменной длины может не иметь инициализатора. В качестве обходного пути вы можете сделать это:

int results[i];
std::fill(results, results + i, 0);

Конечно, лучше использовать std::vector поэтому вы не полагаетесь на какие-либо нестандартные расширения.

Другие вопросы по тегам