C++ 模块是否会使未命名的命名空间变得多余?

Joh*_* Li 6 c++ namespaces unnamed-namespace c++-modules

C++20 引入了模块。任何未在模块中导出的符号都具有模块内部链接。虽然未命名命名空间提供了一种机制,可以使未命名命名空间内的定义具有文件内部链接。这是否意味着当模块在 C++ 社区中成为普遍做法时,未命名的命名空间将变得毫无用处?

Dav*_*ing 2

否:由于(许多)编译器一次只看到一个翻译单元,因此它\xe2\x80\x99对于优化仍然有用,以指示实体不能在任何其他中使用。它还避免了模块单元之间发生意外冲突的可能性(即使与更广泛的代码库相比,这种可能性较小)。

\n