【发布时间】:2014-06-23 03:50:00
【问题描述】:
我有一个 A 类,它有一个嵌套的 B 类。A 类将创建 B 类的 n(运行时参数)实例。
在 A 的构造函数中,在需要在运行时进行计算之后,我计算一个大小,比如说 s。
现在,每个 B 类都将保存一个大小为 s 的数组。
但是,我不允许使用 .cpp 文件,所有工作都必须在头文件中完成。
据我了解,这意味着我不能使用这些方法(使用static):
class B {
static const int s;
int a[s];
};
所以,我决定使用enum,但我无法让它工作(即使使用 C++11 的enum class)。
这个想法是你做这样的事情:
class B {
enum { s = 50 };
int a[s];
};
但我不知道运行前的s。
当然,我可以使用std::vector 或dynamic allocation。
但是因为:
1)我只需要旧好的数组的功能(丢弃向量)
2)我在构造B的实例之前,知道数组的大小(丢弃动态分配)
关于std::dynarray下面讨论:
不幸的是,不在C++14,而是在array TS 或C++17。
Source,感谢 manlio。
然而,丢弃是一个沉重的词。我的意思是,我听说自动分配更快,但动态分配可以让您分配更多空间。此外,在发布模式下,与数组相比,向量并没有那么糟糕。
【问题讨论】:
-
如果你知道编译时的大小,为什么不使用
std::array? -
@40two OP 明确声明它在运行前不知道
s。 -
@40two 大小在编译时是不已知的。
-
OP 似乎想要为会员提供一些 VLA。
-
这有点过早优化的味道。根据 Knuth 的说法,它是邪恶的。使用
std::vector,测量发布版本的性能。
标签: c++ arrays c++11 enums nested-class