【发布时间】:2015-05-11 08:23:48
【问题描述】:
我想要一个包含数组作为数据成员的类。数组的大小是在构造过程中声明的。我知道在编译时需要知道数组的大小,但是有没有办法通过使用const int 来定义大小并随后使用构造函数初始化列表来解决这个问题?我不允许使用向量。这是我徒劳的尝试:
#include <iostream>
using namespace std;
class myArray {
public:
myArray(int size) : capacity(size) {}
private:
const int capacity;
int a[capacity];
};
int main() {
myArray ar(25);
return 0;
}
它给出了以下错误:
'capacity' was not declared in this scope
【问题讨论】:
-
这是一个挑战。我清楚地提到我们不允许使用向量。请不要问为什么,因为这是更好地理解数组的一种方式和挑战。
-
@paxdiablo 哦,那是我的错。
-
我怀疑数组的大小必须或者是挑战所要求的,才能在运行时分配。这个问题有模板版本的答案吗?实际上,数组的容器通常在编译时通过设计确实知道它们的大小。在这些情况下,我们只需要以某种方式将大小暴露给类的接口,以便在类实例化时对其进行配置。我是模板新手,但我想将大小从构造函数参数移动到模板参数也应该有效。
-
正如一些答案中所说,您必须使用某种指针。这样做的原因是在编译时必须知道对象的内存布局,并且数组数据成员是对象大小的一部分。也就是说,考虑具有成员数组 int a[1] int b[2] 的类 A 和 B。那么 sizeof(A) 将小于 sizeof(B)。此外,如果您想构造一个 myArray 对象数组,编译器需要这个静态大小。我希望这为限制提供一些合理性。指向数组的指针(或只是一个指针)是常量大小,sizeof(int *) 等。
标签: c++