【问题标题】:The best way to define a const variable定义 const 变量的最佳方法
【发布时间】:2018-07-03 01:56:12
【问题描述】:

我正在使用 C++ 进行编码,我想知道定义 const 变量的最佳方式。

据我了解,如果我想在 cpp 文件中定义一个 const 变量,我们可以像之前这样编写代码:const static int LEN = 5; 现在 C++ 建议我们使用匿名命名空间:namespace { const int LEN = 5; }

我不知道如何在头文件中正确定义 const 变量。

我在一些头文件中看到了一些代码如下:

const int LEN = 5;

那么这是最好的方法吗?为什么不在头文件中编码const static int LEN = 5;

【问题讨论】:

  • static 是从哪里来的?为什么要使用它?定义 const 值时不需要 static。首先是什么引起了您的问题?
  • @AnT 老兄,这是我的问题...我想知道我们是否应该/可以在头文件中编码const static int LEN = 5
  • (为了正确回答问题,最好首先知道是什么触发了它。)不,我们不应该。只需使用const int LEN = 5;,无论它是在头文件中还是在其他任何地方。匿名命名空间也是不必要的。在 C++ 中,const 已经包含 static。无需明确说明。
  • 这里所说的“最好的方法”是完全没有意义的。这就像在问“什么是最好的汽车”。这取决于。是否需要动力、燃油经济性、外观或保修。 “最好的汽车”会有很大的不同,具体取决于特定的要求。同样,定义常量变量的各种方式都有其针对不同情况的特定语义。要找出“定义 const 变量的最佳方式”,您需要了解差异是什么,以及它们的含义,然后根据具体情况选择“最佳方式”根据您的具体情况。
  • "C++" 没有任何建议

标签: c++ static namespaces constants


【解决方案1】:

我正在使用 C++ 进行编码,我想知道定义 const 变量的最佳方式。

没有“最好的方法”。视情况而定。

顺便说一句,听说过constexpr吗?

据我了解,如果我想在 cpp 文件中定义一个 const 变量,我们之前可以这样编码:const static int LEN = 5;

是的,我们可以。

请注意,使用 static 关键字声明的命名空间范围内的事物具有内部链接

另请注意,我LEN 称为“静态变量”。

现在 C++ 建议我们使用匿名命名空间:namespace { const int LEN = 5; }

匿名命名空间中声明的所有内容都有内部链接。但我认为 C++ 本身并没有提出任何建议。

我在一些头文件中看到了一些代码如下:

const int LEN = 5;

C++ 有一个特殊规定,即默认情况下,命名空间范围的 const 限定变量具有内部链接,即使没有 static 说明符。

见:https://en.cppreference.com/w/cpp/language/storage_duration#Linkage

注意它与 C 不同。

另请注意,这并不意味着“const 包括static”。以这种方式思考是令人困惑的。

我们为什么不在头文件中编码const static int LEN = 5;

实际上,我们可以。由于非技术原因,它甚至可能是有益的。如果您认为阅读您的代码的受众不知道该特殊规定,static 说明符将向您的受众明确该变量具有内部链接。

【讨论】:

  • 我有一个问题:为什么头文件中的const int LEN = 5;不会导致重定义错误?我认为一个头文件可能包含多次。
  • @Yves 这就是internal links的属性:它在翻译单元内部,其他翻译单元看不到。将LEN 放在标题中,每个翻译单元都有自己独特的LEN 副本,所有这些副本都在各自的翻译单元内部。
  • @Yves 思考语言特性,而不是关键字。
猜你喜欢
  • 1970-01-01
  • 2018-11-05
  • 2012-11-12
  • 2015-08-15
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-30
相关资源
最近更新 更多