У меня есть класс, как этотобъект переменного размера не может быть инициализирован
class aClass
{
public:
aClass() : N(5) {}
void aMemberFunction()
{
int nums[N] = {1,2,3,4,5};
}
private:
const int N;
};
Код тестирования
int main()
{
aClass A;
A.aMemberFunction();
const int N = 5;
int ints[N] = {5,4,3,2,1};
return 0;
}
Когда я компилирую (г ++ 4.6.2 20111027), я получаю ошибку
problem.h: In member function ‘void aClass::aMemberFunction()’:
problem.h:7:31: error: variable-sized object ‘nums’ may not be initialized
Если я закомментируйте строку с int nums[N]
я не получаю ошибку компиляции, поэтому подобный код для ints
массив в порядке. Разве не значение N
известно во время компиляции?
Что происходит? Почему nums
считается массивом переменного размера? Почему массивы nums
и ints
обрабатываются по-разному?
В массивах C++ требуются постоянные выражения для их размера. то есть она должна быть константой времени компиляции, но N в вашем примере инициализируется динамически, но до литерала. – AraK
Обратите внимание, что 'gcc' фактически поддерживает массивы переменной длины в C++ как расширение, которое вы просто [не можете их инициализировать] (http://stackoverflow.com/a/27339171/1708801) –