我想知道是否可以声明一个数组(此时未知的大小),作为类的私有成员,然后在类的构造函数中设置大小.例如:
class Test {
int a[];
public:
Test(int size);
};
Test::Test(int size) {
a[size]; // this is wrong, but what can i do here?
}
Run Code Online (Sandbox Code Playgroud)
这是可能的还是我应该使用动态数组?谢谢!
Mar*_*ork 17
简答:否(数组的大小仅在编译时定义)完整
答案:
您可以使用向量来实现相同的结果:
class Test
{
std::vector<int> a;
public:
Test(std::size_t size):
a(size)
{}
};
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 13
不,这是不可能的.标头中的数组声明必须具有恒定大小的值.否则,像"sizeof"这样的结构不可能正常运行.您需要将数组声明为指针类型,并在构造函数中使用new [].例.
class Test {
int *a;
public:
Test(int size) {
a = new int[size];
}
~Test() { delete [] a; }
private:
Test(const Test& other);
Test& operator=(const Test& other);
};
Run Code Online (Sandbox Code Playgroud)
正如其他答案所指出的,数组的大小在编译时是固定的。但是,通过使用模板,您可以在编译时参数化大小:
template <int N> class Test {
int a[N];
public:
Test() { }
};
Test<5> test;
Test<40> biggertest;
Run Code Online (Sandbox Code Playgroud)
此技术不允许您在运行时计算大小(如动态std::vector解决方案那样),但根据您的需要,这可能就足够了。