【问题标题】:What is the best way to define a double constant in a namespace?在命名空间中定义双常量的最佳方法是什么?
【发布时间】:2014-10-17 16:23:26
【问题描述】:

在命名空间中定义双常量的最佳方法是什么?例如

// constant.h
namespace constant {
    static const double PI = 3.1415926535;
}

// No need in constant.cpp

这是最好的方法吗?

【问题讨论】:

  • 也许你应该澄清“最佳”并展示一些其他选项。
  • 你不需要静态的。任何 const 都是隐式静态的。
  • 你已经完全按照我的方式完成了。无需添加任何新功能。

标签: c++ namespaces constants


【解决方案1】:

我会说:

-- 在 c++14 中:

namespace constant 
{
  template <typename T = double>
  constexpr T PI = T(3.1415926535897932385);
}

-- 在 c++11 中:

namespace constant 
{
  constexpr double PI = 3.1415926535897932385;
}

-- 在 c++03 中:

namespace constant 
{
  static const double PI = 3.1415926535897932385;
}

请注意,如果您的常量没有普通类型并且您在共享库中,我建议避免在全局/命名空间范围内为其提供内部链接,我不知道这方面的理论,但实际上它确实倾向于随机地把事情搞砸:)

【讨论】:

  • 与 C++11 相比,C++14 示例的结果是什么?前者在我看来有点矫枉过正......
  • @FabioA.Correa 您可以选择PI 的类型,除了使用 double 之外,您不需要强制转换,而且我看不到任何开销,除了一小行代码。 PI是引入变量模板的论文中使用的例子,对于进一步的问题,它解决的最佳来源仍然是那篇论文:open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3651.pdf
  • 在 C++03 中,分配是否需要在单独的源文件中?如果在头文件中赋值会怎样?
  • @Drax,我不是在谈论开销,因为显然这两个示例都是编译时的。我发现您的评论很有教育意义,谢谢。
  • @FabioA.Correa 我很高兴 :)
猜你喜欢
  • 1970-01-01
  • 2010-09-22
  • 2018-02-01
  • 2018-11-05
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多