实际上是char const* const presets[] = { ... };
用字符串文字初始化的吗?换句话说,当您说 时
char const* presents[150]
,这是因为有人忘记了第二个const
,还是因为您稍后实际上修改了指针。是因为有人实际计算了初始化程序,并将数字放在大括号中,并且每次添加或删除初始化程序时都会更新此数字,还是因为您提供的初始化程序较少,并且依赖于正在初始化的尾随值一个空指针?在不确切知道您要做什么的情况下,很难给出好的建议。
在我遇到的最常见的情况下,您真正想要的是一切都是 const,并且数组的大小与初始化器的数量完全对应,最好的解决方案可能是保持原样。要自动调整数组大小,您需要使用 C 样式数组,或(然后仅使用 C++11)std::vector
;
std::array
要求您明确给出元素的数量。并且要获得真正的静态初始化(因此
永远不会有任何初始化顺序问题的风险),您需要一个 C 样式数组或std::array
,在两种情况下
char const*
(而不是std::string
,这需要动态初始化)。
请注意,使用char const*
而不是std::string
确实意味着每次访问它时(通常),您将构造一个新的std::string
. 根据实现,这可能会引入一些额外的运行时开销。通常,这不是问题,但也可能需要考虑;必须权衡一个事实,即如果您使用来自其他静态对象的构造函数的对象,则使用std::string
将导致必须解决的初始化顺序问题。