有这样的代码:
#include <iostream>
int main()
{
int size;
std::cin >> size;
size = size + 1;
int tab3[size];
tab3[0] = 5;
std::cout << tab3[0] << " " << sizeof(tab3) << std::endl;
return 0;
}
结果是:
$ g++ prog.cpp -o prog -Wall -W
$ ./prog
5
5 24
为什么这段代码甚至可以编译?不应该是数组的长度是一个常数变量吗?
我使用的是g ++版本4.4.5。
答案 0 :(得分:13)
C ++中的可变长度数组可作为GCC中的扩展。编译所有警告应该提醒您这个事实(包括-pedantic
)。
答案 1 :(得分:7)
这是C99功能,不是C ++的一部分。它们通常被称为VLA(可变长度阵列。
如果您使用g++
运行-pedantic
,则会被拒绝。
有关详细信息,请参阅GCC docs。
另请参阅:VLAs are evil。
答案 2 :(得分:2)
GCC提供VLA或可变长度数组。更好的做法是创建指针并使用new
关键字来分配空间。 VLA在MSVC中不可用,因此第二种选择更适合跨平台代码