我有一个小项目,其所有代码都在一个命名空间(多个文件)中,在某个文件中我需要使用多个常量。
只有这一个文件才会使用这些常量变量。
哪一个是正确的方法,区别的是什么(我熟悉静态和常数,但仍然不知道差异)
答案 0 :(得分:0)
只有这一个文件才会使用这些常量变量。
如果我理解正确,那句话会自动排除第一个选项:
在标题中声明静态const,在源文件中定义
您不需要在其他编译单元( cpp 文件)中公开声明,因此您不需要在不同的cpp文件中包含头文件。
此时有以下选项:
- 中定义源文件中的const
在命名空间范围
- 中定义源文件中的静态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
有助于自我记录代码。
如果您喜欢匿名命名空间,可以将它们放在一个以帮助澄清它们是该转换单元的内部。这是一个偏好的问题。