在 C++ 中,您可以这样做:
static const char * [4] = {
"One fish",
"Two fish",
"Red fish",
"Blue fish"
};
...这为您提供了一个很好的只读数组数据结构,它在运行时不需要任何 CPU 周期来初始化,因为所有数据都已为您布局(在可执行文件的只读内存页面中)编译器。
但是如果我宁愿使用不同的数据结构而不是数组呢?例如,如果我希望我的数据结构能够通过键快速查找,我必须执行以下操作:
static std::map<int, const char *> map;
int main(int, char **)
{
map.insert(555, "One fish");
map.insert(666, "Two fish");
map.insert(451, "Red fish");
map.insert(626, "Blue fish");
[... rest of program here...]
}
...由于地图数据结构在运行时被填充,这不太优雅且效率较低,即使所有必要的数据在编译时都是已知的,因此(理论上)可以完成这项工作。
我的问题是,在 C++(或 C++11)中有什么方法可以创建一个只读数据结构(例如地图),其数据完全在编译时设置,因此预先填充并准备好在运行时,数组的方式可以是什么?