【问题标题】:Declaring String constants声明字符串常量
【发布时间】:2017-03-08 02:07:55
【问题描述】:

声明有什么好处:

static constexpr const char* K = "k";

对比:

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

谢谢

【问题讨论】:

  • 嗯,第一个显然是编译时常量表达式,而第二个在运行时分配动态内存。这完全取决于您的用例。
  • 那么第一种形式没有明确的优势吗?

标签: string c++11 constants


【解决方案1】:

有很大的不同,它将如何影响您的代码取决于很多事情。通常不推荐使用第二种,因为您无法保证 std::string 对象何时会被构造或销毁。

最好用Google C++ Style Guide来概括:

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

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

他们禁止第二个:

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

【讨论】:

  • 请注意,Google 不被视为 C++ 的权威。例如,建议将 C 数组作为 std::vector 的替代品完全忽略 std::array。
猜你喜欢
  • 2015-05-21
  • 2014-03-12
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多