【发布时间】:2018-04-16 17:12:36
【问题描述】:
我试图理解,在编译时在堆栈上创建一个未知大小的数组时会发生什么。让我们考虑这段代码:
int main()
{
int x;
cin >> x;
int tab[x];
}
我发现了很多关于这个说你不能在堆栈上创建一个未知大小的数组的信息,但是我没有找到任何信息为什么 C++ 编译器允许它,或者其中一些允许它?创建这样的数组时会发生什么?它甚至是在堆栈上创建的还是已经在堆上?
GCC 编译器是否有一些选项可以打开,这样的构造会被视为错误或至少是警告?
【问题讨论】:
-
1) VLA 是非标准 C++(如标准 C++ 不允许它们)。不过,一些编译器扩展使它们成为可能。 2)“为什么 C++ 编译器允许它”没有像 the C++ 编译器这样的东西。它有很多实现。
-
变长数组
-
古老的做法是在运行时声明数组时使用动态内存。现在,在 C++ 中,您应该改用
std::vector。 -
顺便说一句,它不称为“表”,而是数组,
x不是“未知”,它只是在编译时未知,但是一旦用户输入了一个数字,您就可以创建一个该大小的数组(如果你想写标准的c++,就不要这样) -
我不明白为什么这个问题会被否决。如果我不知道答案,我也不知道在哪里可以找到有关此的更多信息。严格来说,重复项也不是重复项。