3

创建数组时,编译器必须知道它的大小吗?例如,以下代码片段无法编译。

class A
{
   int n;
   int arr[n];
};  

但是,以下编译。

int main()
{
  int n;

  std::cin >> n;
  int arr[n];
}

为什么?

4

4 回答 4

5

标准 C++ 不支持变长数组。1

如果你想要这种行为,我建议使用一个std::vector而不是原始的 C 样式数组。


1. 但是,您可以在 C99 或非标准语言扩展中找到它们。

于 2012-06-17T15:04:47.847 回答
4

(1) 创建 A 的实例时发生的第一件事是分配内存,此时该成员n不存在,因此无法知道需要多少内存arr

(2) 在堆栈上创建一个数组,这只会稍微移动堆栈指针。

于 2012-06-17T15:07:44.453 回答
1

如果你想创建一个可变大小的数组,你必须在堆上使用new. 如果您已将整数声明为常量,那么您可以按照您的方式使用它的唯一方法。

于 2012-06-17T15:06:03.877 回答
0

在编译的那一刻,变量 n 的值是未知的(它只是在给定地址下的内存中的值),所以你不能创建一个未知大小的变量。在第二种情况下,您知道大小,因为您使用了 cin(不是 sin)。

于 2012-06-17T15:04:48.723 回答