Tôi có một lớp học như thế nàyđối tượng biến kích thước có thể không được khởi tạo
class aClass
{
public:
aClass() : N(5) {}
void aMemberFunction()
{
int nums[N] = {1,2,3,4,5};
}
private:
const int N;
};
Mã thử nghiệm là
int main()
{
aClass A;
A.aMemberFunction();
const int N = 5;
int ints[N] = {5,4,3,2,1};
return 0;
}
Khi tôi biên dịch (g ++ 4.6.2 20.111.027), tôi nhận được lỗi
problem.h: In member function ‘void aClass::aMemberFunction()’:
problem.h:7:31: error: variable-sized object ‘nums’ may not be initialized
Nếu tôi nhận xét dòng với int nums[N]
Tôi không nhận được lỗi biên dịch, vì vậy mã tương tự cho ints
mảng là tốt. Giá trị của N
có được biết đến lúc biên dịch không?
Điều gì đang xảy ra? Tại sao nums
được coi là một mảng có kích thước biến? Tại sao các mảng nums
và ints
được xử lý khác nhau?
Trong mảng C++ yêu cầu biểu thức liên tục cho kích thước của chúng. nghĩa là nó phải là một hằng số biên dịch, nhưng N trong ví dụ của bạn được khởi tạo động mặc dù là một chữ. – AraK
Lưu ý rằng 'gcc' thực sự hỗ trợ các mảng độ dài biến đổi trong C++ như một phần mở rộng bạn chỉ [không thể khởi tạo chúng như thế] (http://stackoverflow.com/a/27339171/1708801) –