下面是类的定义。
Class Type {
public:
constexpr Type (std::string label, const std::set<int>& ids) : label_(label), ids_(ids) {}
private:
const std::string label_;
const std::set<int>& ids_;
}
我想定义一些常量对象,这样我们就可以用它们作为枚举。例如:
const Type A = {"type_a", {1, 2}};
const Type B = {"type_b", {3}};
但我得到了以下错误
Non-literal type std::set<int> cannot be used in a constant expression
如何正确地初始化常量对象呢?也欢迎修改类定义的建议。谢谢!
2条答案
按热度按时间hsgswve41#
如果您只需要创建一个
const
对象,如下所示也就是说,一个对象一旦初始化就不能改变,那么你只需要从构造函数中移除
constexpr
。nqwrtyyt2#
因为你不能在编译时创建字符串,首先考虑一下,字符串在大多数时候分配内存。那么你在编译时如何分配内存呢?你必须提供一些编译时分配,比如C++20中的pmr。顺便说一下,一些容器,比如std::array(看一下这个https://en.cppreference.com/w/cpp/header/array)可以用在编译时上下文中,因为它们足够简单,可以在编译时构造。记住,在编译时分配的内存必须在编译结束时释放。
而且我认为这个问题可能会帮助你更好地理解我们在这里讨论的内容。https://codereview.stackexchange.com/questions/272265/c20-compile-time-string-utility