Avatar ·

为什么在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++中应该使用匿名命名空间。 你们能解释一下为什么这