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
поэтому вы не полагаетесь на какие-либо нестандартные расширения.