为什么在C++中应优先使用匿名命名空间而非静态函数?
大家好!我是一名初学C++的开发者,在学习“内部链接”(internal linkage)主题时,我遇到了两种使函数或变量局限于单个翻译单元(translation unit)的方法。
第一种方法是使用`static`关键字修饰全局函数和变量。例如:
```cpp
// file.cpp
static void helperFunction() {
// ... some implementation
}
static int internalCounter = 0;
```
第二种方法是将所有内容放入匿名命名空间(unnamed namespace):
```cpp
// file.cpp
namespace {
void helperFunction() {
// ... some implementation
}
int internalCounter = 0;
}
```
我知道这两种方法都能使符号仅在该文件内可见。但我经常听到有经验的同事说,对函数使用`static`是来自C语言的“过时做法”,而在现代C++中应该使用匿名命名空间。
你们能解释一下为什么这