我对此的了解有限,情况如下:
const std::map<char*, int> map;
constexpr void Foo()
{
map["foo"] = 0;
}
这不会编译,因为它抱怨我无法为常量变量赋值。但我的印象是,如果函数在编译时被整理出来,可以设置一个常量值的值。
这样的事情可能吗?
答案 0 :(得分:1)
在编译时初始化结构的唯一方法是它是否有constexpr
构造函数。 std::map
没有constexpr
构造函数。此外,我不认为它可能有一个,因为它是部分堆分配的,new
,malloc
等不是constexpr
。
你可以这样做:(C ++ 11)
struct my_pair {
const char * first;
int second;
};
constexpr my_pair my_map[] = { {"foo", 5},
{"bar", 10},
{"baz", 20} };
int main() {}
然后,当您的程序从此阵列启动时,您可以构建std::map
。
如果你真的希望在编译时按键对数组进行排序,那么在C ++ 11标准中,我想我会尝试使用模板元编程实现排序。你可以使用模板/变量包扩展来做到这一点没有太大困难,但它可能需要一两个小时才能完全写出并让它工作,这取决于你对模板的熟练程度。然后,您必须将键,值对格式化为代码中的模板参数,而不是数组元素,因此它会变得有点混乱。
在C ++ 14中,在constexpr
函数中进行排序可能/更容易,我不确定。