T240725 说到,Unnamed namespaces 有一个唯一的名称会通过 using-directives 自动导入,倘若可以手动指定这个名称,就是 inline namespaces 了。此时,自动导入的名称就是 inline namespace 的名称,比如 std::literals 和 std::liternals::chrono_literals 的实现: #if __cplusplus >= 202002L inline namespace literals { inline namespace chrono_literals { /// @addtogroup chrono /// @{ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wliteral-suffix" /// Literal suffix for creating chrono::day objects. ///… Continue Reading T240730 inline namespace

Unnamed namespaces,也叫 Anonymous namespaces,是命名空间的一种特殊形式。这种形式可以省略命名空间的名称,如: namespace { /* .. . */ } 在语义上与等价于: namespace unique_name { /* … */ } using namespace unique_name; 编译器会自动生成一个唯一的名称,并使用 using-directives 自动导入名称。 与其他形式的命名空间不同,Unnamed namespaces 的链接方式是 Internal Linkage,标准描述为: An unnamed namespace or a namespace declared directly or indirectly within an unnamed namespace has internal linkage. All other namespaces… Continue Reading T240725 Unnamed namespaces