【发布时间】:2017-01-18 14:57:22
【问题描述】:
C/C++ 在编译时有多种分配内存的方法。例如,我可以添加一个全局或静态变量。存储值的内存是在编译时分配的:
int x;
// -- or --
void f() {
static int y;
}
// -- or --
class C {
static int z;
};
int C::z;
但是这种解决方案不能用于“内联”分配内存。是否有可能在一行中执行以下操作?
static int value_behind_x; // does not need to be "named"
int * const x = &value_behind_x;
我的意思是这样的:
int * const x = static_new int;
// -- or --
int * const x_array = static_new int[10];
我知道 C/C++ 中的一件事允许这样的事情:字符串文字。但是,它们必须是常量,并且不允许将大小指定为数字。
如果没有这样的方法,是否有原因,或者将来可能会实施?这会很好,因为它可以实现constexpr 版本的容器,例如std::vector。
【问题讨论】:
-
选择 C 或 C++
-
std::array不是一种“constexpr向量”吗? -
如果您使用 C++,听起来您可能正在寻找新的展示位置。
-
@KerrekSB 我知道
std::array但它需要将大小指定为模板参数。大小不应该是类型的一部分。甚至应该可以更改指针,使其指向动态分配的内存。 -
@JojOatXGME 编写您自己的模板函数
joj_new<T>(),它将根据需要在静态或动态数据中创建对象。不过,您必须预先分配静态内存。
标签: c++ allocation constexpr compile-time