声明字符串常数



声明的优势是什么:

static constexpr const char* K = "k";

versus:

static const std::string K("k");

谢谢

有很大的区别,它将如何影响您的代码取决于许多因素。通常,不建议使用第二个,因为您不能保证何时构建或破坏std ::字符串对象。

最好由Google C 样式指南总结:

禁止使用静态存储持续时间的类类型的变量:由于不确定的施工和破坏顺序,它们引起了难以找到的错误。但是,如果这些变量为constexpr:它们没有动态初始化或破坏。

具有静态存储持续时间的对象,包括全局变量,静态变量,静态类成员变量和函数静态变量,必须是普通的旧数据(POD):仅INT,chars,floats或pointers或pointers或pointers或pointers,或者豆荚

他们禁止第二个:

因此,我们仅允许静态变量包含POD数据。此规则完全取消了STD :: vector(改用C数组)或字符串(使用const char [])。

最新更新