Static constexpr of set

Static constexpr of set

本文关键字:set of constexpr Static      更新时间:2023-10-16
enum class PARAM_TYPE_ {INT_};
enum class PARAM_NAME_ {NAME_};
typedef std::pair<PARAM_NAME_,PARAM_TYPE_> PARAM_;
static constexpr std::unordered_set<PARAM_> params_ {
        PARAM_(PARAM_NAME_::NAME_,PARAM_TYPE_::STRING_)
};

为什么不可能将其放在我的类标题文件中?

我尝试了很长时间来弄清楚为什么不可能使用:

的组合

静态,constexpr,非文字类型

但是我的总体C 知识太有限了。

来自constexpr:

constexpr变量必须满足以下要求:

  • 它的类型必须是字面类型
  • 必须立即初始化
  • 其初始化的全表达,包括所有隐式 转换,构造仪调用等必须是恒定的表达式

现在,从字面类型中,我们可以得出结论,字面类型可能是一种骨料类型,一种至少一个constexpr(可能是模板)构造函数的类型,它不是副本或移动构造函数,或者,因为C 17,闭合类型。

std::unordered_set中,我们看到没有constexpr构造函数。其他两种情况也不适用,因此您不能将std::unordered_set标记为constexpr

基本上,您将std::unordered_set与默认分配器一起使用,这意味着动态内存分配。动态内存分配是运行时constexpr是完全 compile time beast时。