仅在一个cpp文件中使用的常量变量 - 在哪里声明它们

时间:2017-11-15 15:59:10

标签: c++ static const

我有一个小项目,其所有代码都在一个命名空间(多个文件)中,在某个文件中我需要使用多个常量。

只有这一个文件才会使用这些常量变量。

哪一个是正确的方法,区别的是什么(我熟悉静态和常数,但仍然不知道差异)

  1. 在标题中声明静态const,在源文件中定义
  2. 在命名空间范围
  3. 中定义源文件中的const
  4. 在命名空间范围
  5. 中定义源文件中的静态const

2 个答案:

答案 0 :(得分:0)

  

只有这一个文件才会使用这些常量变量。

如果我理解正确,那句话会自动排除第一个选项:

  

在标题中声明静态const,在源文件中定义

您不需要在其他编译单元( cpp 文件)中公开声明,因此您不需要在不同的cpp文件中包含头文件。

此时有以下选项:

  
      
  1. 在命名空间范围

  2. 中定义源文件中的const   
  3. 在命名空间范围

  4. 中定义源文件中的静态const   

在您的情况下,正确的答案应该是(3)。

为什么?

答案只是与功能块之外的static变量的含义相关联。

来自here

  

静态说明符[...]。当在命名空间范围内的声明中使用时,它指定内部链接。

因此,当您需要声明一个仅在该单个编译单元(cpp文件)中使用的常量变量时​​,将其声明为static const以表示< em>内部联系在阅读中更加明确。

附加

In general是您在编译单元中使用匿名命名空间的好地方。

.cpp文件中:

 namespace {
    const int kVariable = 12;
 }

 // no more static const int kVariable = 12;

 void foo() {
   std::cout << kVariable << '\n';
 }

目的几乎相同。

结论

所有这些信息都会让您对常量声明中的static关键字有一个大概的了解。

无论如何,这通常是一种风格问题。

答案 1 :(得分:0)

我会选择选项#3。这是一个更多的打字,意味着与#2相同。

但是人们(包括我自己!)很容易忘记const将具有内部联系,除非声明extern const。因此,在我看来,static const有助于自我记录代码。

如果您喜欢匿名命名空间,可以将它们放在一个以帮助澄清它们是该转换单元的内部。这是一个偏好的问题。