【发布时间】:2016-03-23 12:43:11
【问题描述】:
我正在阅读 Stroustrup's C++ 之旅。在第 9 页,他说:
"数组的大小必须是常量表达式。"
稍后,在 pg. 16、他使用如下代码示例:
void vector vector_init(Vector& v, int s)
{
v.elem = new double[s]; // Allocate an array of s doubles
v.sz = s;
}
这里s不是常量表达式,那么如何将v.elem初始化为new double[s]合法呢?
【问题讨论】:
-
栈上的数组需要常量表达式,而不是堆上的。 learncpp.com/cpp-tutorial/79-the-stack-and-the-heap
-
段落的其余部分暗示了第 9 页的引用是指数组的 声明。
-
@GillBates 它与数组的存储位置无关。如果数组是类的成员并且该类的实例是动态分配的,则数组声明仍然需要常量表达式大小,尽管实际数组“在堆上”。
-
作者还称这本书很“薄”。在我看来,这不是一本可以从中学习这些基本概念的书。
-
@molbdnilo 这显然不是我的意思。我说的是数组本身是如何初始化的。通过
new使用指向它的指针或只是在本地。