声明字符串常量

时间:2017-03-08 02:07:55

标签: string c++11 constants

声明的优点是什么:

static constexpr const char* K = "k";

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

由于

1 个答案:

答案 0 :(得分:0)

有一个很大的区别,它会如何影响你的代码取决于很多东西。通常不建议使用第二个,因为您无法保证何时构造或销毁std :: string对象。

最好用Google C++ Style Guide总结:

  

禁止具有静态存储持续时间的类类型的变量:由于构造和销毁的不确定顺序,它们导致难以发现的错误。但是,如果这些变量是constexpr,则允许这样的变量:它们没有动态初始化或破坏。

     

具有静态存储持续时间的对象,包括全局变量,静态变量,静态类成员变量和函数静态变量,必须是普通旧数据(POD):只有整数,字符,浮点数或指针,或者数组/结构POD。

他们禁止第二个:

  

因此,我们只允许静态变量包含POD数据。此规则完全禁止std :: vector(改为使用C数组)或string(使用const char [])。