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

omi*_*idh 3 c++ arrays

我正在阅读Lappman的"C++ Primer"一书.在第113页它说

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

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

unsigned cnt  = 43; //not an const expression
string bad[cnt]; // error
Run Code Online (Sandbox Code Playgroud)

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

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

void get_size(int size) {
  int arr[size];
  cout << sizeof (arr);
}
Run Code Online (Sandbox Code Playgroud)

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

Lig*_*ica 6

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

这是真实的,在C++中.

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

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