设置的静态constexpr

时间:2017-12-16 14:50:05

标签: c++ c++11

conda install -c conda-forge uwsgi

为什么不能将它放在我的类头文件中?

我试了很长时间才弄清楚为什么不可能使用以下组合:

  

static,constexpr,非文字类型

但我的整体c ++知识太有限了。

1 个答案:

答案 0 :(得分:6)

来自constexpr

  

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

     
      
  • 其类型必须是文字类型
  •   
  • 必须立即初始化
  •   
  • 其初始化的完整表达,包括所有隐式   转换,构造函数调用等必须是一个常量表达式
  •   

现在,从literal type我们可以得出结论,文字类型可能是一个聚合类型,一个至少有一个constexpr(可能是模板)构造函数的类型,它不是复制或移动构造函数,或者从C ++ 17开始,一个闭包类型

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

基本上,您将std::unordered_set与默认分配器一起使用,这意味着动态内存分配。当constexpr完全是编译时野兽时,动态内存分配是一个运行时事物。