gpt4 book ai didi

c++ - 集的静态constexpr

转载 作者:行者123 更新时间:2023-12-01 15:05:34 27 4
gpt4 key购买 nike

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_)
};

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

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

static, constexpr, non-literal type



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

最佳答案

constexpr:

A constexpr variable must satisfy the following requirements:

  • its type must be a literal type
  • it must be immediately initialized
  • the full-expression of its initialization, including all implicit conversions, constructors calls, etc, must be a constant expression


现在,从 literal type可以得出结论,文字类型可能是聚合类型,具有至少一个constexpr(可能是模板)构造函数的类型,该构造函数不是复制或移动构造函数,或者由于C++ 17而已,所以不是闭包类型。

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

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

关于c++ - 集的静态constexpr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47846844/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com