如果我编码这个
std::map<int, char> example = {
(1, 'a'),
(2, 'b'),
(3, 'c')
};
然后g++对我说
deducing from brace-enclosed initializer list requires #include <initializer_list>
in C++98 ‘example’ must be initialized by constructor, not by ‘{...}’
这让我有点恼火,因为构造函数是运行时的,理论上可能会失败。
当然,如果确实如此,它会很快失败并且应该始终如一地这样做,所以我应该快速定位并纠正问题。
但是,我仍然很好奇 - 是否有在编译时初始化 map 、 vector 等?
编辑:我应该说我正在为嵌入式系统开发。并非所有处理器都有 C++0x 编译器。最受欢迎的可能会,但我不想遇到问题并且必须维护 2 个版本的代码。
至于 Boost,我还没有决定。他们对在嵌入式系统中使用他们的有限状态机类持怀疑态度,所以这实际上是我在这里编码的,事件/状态/Fsm 类。
唉,我想我最好还是谨慎行事,但我希望这次讨论对其他人有所帮助。
最佳答案
这并不完全是静态初始化,但仍然可以尝试一下。 如果你的编译器不支持 C++0x,我会选择 std::map 的迭代构造函数:
std::pair<int, std::string> map_data[] = {
std::make_pair(1, "a"),
std::make_pair(2, "b"),
std::make_pair(3, "c")
};
std::map<int, std::string> my_map(map_data,
map_data + sizeof map_data / sizeof map_data[0]);
这非常易读,不需要任何额外的库,并且应该适用于所有编译器。
关于C++,我可以在编译时静态初始化 std::map 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2172053/