【问题标题】:how to store a const array in executable? [duplicate]如何将 const 数组存储在可执行文件中? [复制]
【发布时间】: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


【解决方案1】:

是否可以不使用宏来做到这一点?

委托构造函数呢?

template<int N>
struct A {

  template <int ... Is>
  constexpr A(std::integer_sequence<int, Is...>)
     : array{ fun(Is)... }
   { }

  constexpr A() : A{std::make_integer_sequence<int, N>{}}
   { }

  int array[N];
};

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 2018-04-17
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2019-06-23
    • 2012-05-09
    • 1970-01-01
    • 2014-01-09
    相关资源
    最近更新 更多