Static constexpr of set
Static constexpr of set
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时。
相关文章:
- Usages of std::move
- 为什么我无法更改"set<set>"循环中的值<int>
- 对于set上的循环-获取next元素迭代器
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 在声明中合并两个常量"std::set"(不是在运行时)
- 具有变量Number of Arguments的std::函数的矢量
- Capacity of a deque
- 有没有办法对std::unordered_set、std::unrdered_map、std::set、std::map
- Deprecation of _writeBarrier()
- constexpr begin of a std::array
- 将 std::set 与基于键的比较器一起使用
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- C++ "error: invalid use of void expression"
- 如何使用set实现无序数据结构?
- 将 std::set 分配给 2D std::vector of ints
- Static constexpr of set
- 在C++中实现Set of octets类
- C++ mmap of a set
- A set of weak_ptr