【发布时间】:2020-06-11 16:04:41
【问题描述】:
我想存储一个计算出的 const 数组,使得 a[i] = i*i -3;
这是我的想法,但我不确定:
constexpr int fun(int x) {
return x * x - 3;
}
template<int N>
struct A {
constexpr A() : array() {
for (auto i = 0; i != N; ++i) array[i] = fun(i);
}
int array[N];
};
const A<4> array1{};
const int array2[] = {-3, -2, 1, 6};
我认为array1 已初始化,而不是像array2 这样存储在可执行文件中。
不使用宏是否可以做到这一点?
【问题讨论】:
-
这能回答你的问题吗? Create N-element constexpr array in C++11 尤其是this answer,我用得很好。
-
两个全局变量都可以存储在可执行文件中。例如,对于 elf 二进制文件,它们将位于
.rodata部分。您可能会遇到编译器删除该变量的情况,因为它没有检测到对它的任何引用。如果您想确保无论是否使用它都可以从外部看到,请将您的变量声明为extern:参见gcc.godbolt.org/z/E-M9r5 -
也许在初始化列表而不是构造函数主体中初始化
array会更好。 -
@underscore_d: 正是我想要的,谢谢
标签: c++ arrays constants constexpr