定义const变量的最佳方法

时间:2018-07-03 01:56:13

标签: c++ static namespaces const

我正在使用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;

2 个答案:

答案 0 :(得分: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 ++有一项特殊规定,即使没有static说明符,默认情况下,使以名称空间为范围的const限定变量具有内部链接

请参阅:https://en.cppreference.com/w/cpp/language/storage_duration#Linkage

请注意,它与C不同。

还请注意,这并不意味着“ const包括static”。用这种方式思考会令人困惑。

  

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

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

答案 1 :(得分:-2)

1。如果多个CPP文件包含标头,则标头中的定义变量可能会导致多个定义。

2.Static限定符将使const变量成为“ local”,因此在#include“ .h”时创建了一个新实例。名称空间{}做同样的事情。

3。就像@Ant所说的那样,C ++中const已经包含static,因此不会发生多定义错误。