由非常量变量定义的大小数组

时间:2011-11-14 17:49:21

标签: c++ arrays

有这样的代码:

#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。

3 个答案:

答案 0 :(得分:13)

C ++中的可变长度数组可作为GCC中的扩展。编译所有警告应该提醒您这个事实(包括-pedantic)。

答案 1 :(得分:7)

这是C99功能,不是C ++的一部分。它们通常被称为VLA(可变长度阵列。

如果您使用g++运行-pedantic,则会被拒绝。

有关详细信息,请参阅GCC docs

另请参阅:VLAs are evil

答案 2 :(得分:2)

GCC提供VLA或可变长度数组。更好的做法是创建指针并使用new关键字来分配空间。 VLA在MSVC中不可用,因此第二种选择更适合跨平台代码