创建数组时,编译器必须知道它的大小吗?例如,以下代码片段无法编译。
class A
{
int n;
int arr[n];
};
但是,以下编译。
int main()
{
int n;
std::cin >> n;
int arr[n];
}
为什么?
创建数组时,编译器必须知道它的大小吗?例如,以下代码片段无法编译。
class A
{
int n;
int arr[n];
};
但是,以下编译。
int main()
{
int n;
std::cin >> n;
int arr[n];
}
为什么?
标准 C++ 不支持变长数组。1
如果你想要这种行为,我建议使用一个std::vector
而不是原始的 C 样式数组。
1. 但是,您可以在 C99 或非标准语言扩展中找到它们。
(1) 创建 A 的实例时发生的第一件事是分配内存,此时该成员n
不存在,因此无法知道需要多少内存arr
。
(2) 在堆栈上创建一个数组,这只会稍微移动堆栈指针。
如果你想创建一个可变大小的数组,你必须在堆上使用new
. 如果您已将整数声明为常量,那么您可以按照您的方式使用它的唯一方法。
在编译的那一刻,变量 n 的值是未知的(它只是在给定地址下的内存中的值),所以你不能创建一个未知大小的变量。在第二种情况下,您知道大小,因为您使用了 cin(不是 sin)。