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

scd*_*dmb 10 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;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

$ g++ prog.cpp -o prog -Wall -W 
$ ./prog
5
5 24
Run Code Online (Sandbox Code Playgroud)

为什么这段代码甚至可以编译?数组的长度不应该是常量变量吗?

我使用的是g ++ 4.4.5版.

Ker*_* SB 13

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


Kle*_*ist 7

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

如果您运行g++-pedantic将被拒绝.

有关详细信息,请参阅GCC文档.

另见:VLA是邪恶的.