C ++,数组大小必须是const表达式

时间:2015-05-28 06:54:45

标签: c++ arrays

我正在阅读Lappman的“C ++ Primer”一书。在第113页它说

  

数组中元素的数量是数组类型的一部分。因此,维度必须   在编译时知道,这意味着维度必须是常量   表达

此外,它说我们不能做这样的事情

unsigned cnt  = 43; //not an const expression
string bad[cnt]; // error

但事实并非如此,我编译它没有任何问题,我甚至可以做这样的事情

int i;
cin >> i;
get_size(i);

void get_size(int size) {
  int arr[size];
  cout << sizeof (arr);
}

它运行良好,为什么每本书都说在编译时必须知道数组大小?或者它必须是const表达式?

2 个答案:

答案 0 :(得分:6)

因为这些书正在教你C ++。

是真的,在C ++中。

您使用的是由GCC提供的非标准扩展,称为可变长度数组

如果您打开所有编译器警告(应该始终执行此操作),则会在构建期间通知您。

答案 1 :(得分:1)

这称为VLA(可变长度数组)。它并不是非常可接受而且实际上standard in C99。 GCC允许它作为C ++代码的扩展。

如果您想进行一些实验,可以使用-std=standard-ansi-pedantic选项。

您也可以参考:Why does a C/C++ compiler need know the size of an array at compile time?,其中接受的答案有很好的解释。