如何在类成员中声明一个没有特定大小的数组?我想在类构造函数中立即设置此数组的大小。是否可以在不使用堆或调整数组大小的情况下实现这样的事情?
如何在类成员中声明一个没有特定大小的数组?我想在类构造函数中立即设置此数组的大小。是否可以在不使用堆或调整数组大小的情况下实现这样的事情?
变长数组不被 C++ 标准所允许。你可以采用以下方法:
std::vector
请注意,大多数编译器都支持变长数组作为扩展功能。因此,如果你不担心可移植性且你的编译器支持它,你可以使用它。当然,它也有自己的问题,但在你所述的限制条件下,这是一个选择。
C++要求在编译时必须知道自动存储数组的大小,否则数组必须进行动态分配。因此,在某个级别上你需要进行动态分配,但你无需直接关心它:只需使用一个std::vector
:
#include <vector>
class Foo
{
public:
Foo() : v_(5) {}
private:
std::vector<int> v_;
};
v_
是一个存储ints
的向量,并构建为大小为5
。向量会自动处理动态分配。std::dynarray
,它非常类似于 std::vector
,只不过其大小在构造时已经固定。这更接近于普通动态分配数组的功能。您可以使用向量,只需包含头文件#include<vector>
即可。
它可以根据需要增长和缩小大小,并且向量具有内置的方法/函数,可以使您的工作更加轻松。
类成员数组必须在编译时声明精确的大小,无法绕过此限制。
你唯一能够在类的直接成员中声明一个数组,同时又能够在运行时决定其大小的方法就是采用从C语言继承而来的流行的"struct hack"技术。
除此之外,你必须将数组声明为类的间接成员:要么声明一个指针类型的成员并稍后分配内存,要么使用一些实现运行时大小数组的库(如std::vector
)。
dynarray
。目前,正如其他人所说,std::vector
是最好的选择。 - jrok