C++20 引入了模块化系统。在模块中未被导出的任何符号,将具有模块内部链接。而未命名的命名空间为实现在未命名命名空间内定义具有文件内部链接的机制提供了一种方法。这是否意味着,当模块化成为C++社区的通用实践时,未命名的命名空间将变得无用?
C++20 引入了模块化系统。在模块中未被导出的任何符号,将具有模块内部链接。而未命名的命名空间为实现在未命名命名空间内定义具有文件内部链接的机制提供了一种方法。这是否意味着,当模块化成为C++社区的通用实践时,未命名的命名空间将变得无用?
不会:由于(许多)编译器一次只能看到一个翻译单元,因此为了优化,指示实体不能在其他任何地方使用仍然是有用的。它还避免了模块单元之间意外冲突的可能性(即使与更广泛的代码库相比,这种可能性应该更小)。