声明字符串常量
答
有一个很大的区别,它是如何影响你的代码取决于许多因素。通常第二个不推荐,因为你不能保证什么时候std :: string对象会被构造或者被破坏。
它最好由Google C++ Style Guide总结:
具有静态存储类类型的变量是被禁止的:他们会由于建设和毁灭的不确定的顺序难以发现漏洞。但是,如果这些变量是constexpr,则允许使用这些变量:它们没有动态初始化或破坏。
具有静态存储持续时间的对象,包括全局变量,静态变量,静态类成员变量和函数静态变量,必须为普通旧数据(POD):只有整数,字符,浮点数或指针或数组/结构的POD。
他们禁止第二:
因此,我们只允许静态变量包含POD数据。这个规则完全禁止使用std :: vector(改用C数组)或string(使用const char [])。
+0
请注意,Google不被视为C++的权威机构。例如,建议使用C数组替代'std :: vector'完全忽略'std :: array'。 – MSalters
那么,第一个显然是编译时常量表达式,而第二个在运行时分配动态内存。这完全取决于你的用例。 – DeiDei
因此,第一种形式没有明确的优势? – Ted