C ++在编译时评估constexpr模板数组值

时间:2019-06-21 20:22:28

标签: c++ expression constants constexpr compile-time

我正在编译时创建一个打包字符数组,但是c ++告诉我该表达式必须具有常量值-无法评估不完整的“ gradient <256U>”的值。

我正在尝试通过代码在我的代码中嵌入颜色渐变。

template<unsigned S>
struct gradient {
  constexpr gradient() : arr() {
    for (auto i = 0; i < S; i++)
      for (auto j = 0; j < S; j++)
        arr[i + j * S] = ((i % 256) << 24) | ((j % 256) << 16) | (((i * j) % 256) << 8) | 255;
  }

  unsigned arr[S * S];
};

constexpr auto g0 = gradient<255>(); // ok
constexpr auto g1 = gradient<256>(); // error
constexpr auto g2 = gradient<1024>(); // error

突然之间,我无法创建具有比255高的值的渐变结构。但是为什么呢?

0 个答案:

没有答案