给常量表达式中的常量变量赋值
Assigning to a constant variable in an constant expression
我在这方面的知识有限,情况如下:
const std::map<char*, int> map;
constexpr void Foo()
{
map["foo"] = 0;
}
这不能编译,因为它抱怨我不能给常量变量赋值。但我的印象是,如果在编译时对函数进行排序,可以设置一个常数值的值。
这种事可能吗?
在编译时初始化结构的唯一方法是它具有constexpr
构造函数。std::map
没有constexpr
构造函数。我也不认为它可以有一个,因为它是部分堆分配的,new
, malloc
等不是constexpr
。
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
函数中进行排序,我不确定。
相关文章:
- 通过多个头文件使用常量变量
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 非常量变量只读位置的赋值
- 使用大量已知常量变量的正确方法
- 无法在具有常量变量大小的类中创建堆栈分配数组
- 这些语句是否等效(静态变量、常量变量和泛型)
- 包含常量变量并包含在多个文件中的标头的链接错误
- 我们如何修改常量变量的值
- 如何在模板类中设置静态常量变量
- 为什么常量变量是模板特殊化所必需的,而不是常量
- 如何在函数中传递常量变量?
- 定义常量变量的最佳方法
- C++ 声明常量变量,但推迟其初始化?
- 如何初始化具有常量变量的结构数组
- 使用常量变量作为维度将矩阵声明为类成员时出现编译器错误
- 使用指针 c++ 更改常量变量
- c++ 类中的静态常量变量和常量变量在存储方面是否有区别
- 为什么 lambda 对象中的局部变量是常量变量?
- 使用常量变量作为数组的大小
- 为许多类可能需要的所有常量变量制作独立的头文件是否是一种很好的做法?