声明的优点是什么:
static constexpr const char* K = "k";
与
static const std::string K("k");
由于
答案 0 :(得分:0)
有一个很大的区别,它会如何影响你的代码取决于很多东西。通常不建议使用第二个,因为您无法保证何时构造或销毁std :: string对象。
最好用Google C++ Style Guide总结:
禁止具有静态存储持续时间的类类型的变量:由于构造和销毁的不确定顺序,它们导致难以发现的错误。但是,如果这些变量是constexpr,则允许这样的变量:它们没有动态初始化或破坏。
具有静态存储持续时间的对象,包括全局变量,静态变量,静态类成员变量和函数静态变量,必须是普通旧数据(POD):只有整数,字符,浮点数或指针,或者数组/结构POD。
他们禁止第二个:
因此,我们只允许静态变量包含POD数据。此规则完全禁止std :: vector(改为使用C数组)或string(使用const char [])。