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