using namspace ns_name;
using-directive 将 ns_name 中的名字提升到使用这个语句的 scope
using ns_name::name;
using-declaration 将 ns_name 中的 name 提升到这个语句的 scope
namespace name = qualified-namespace;
命名空间的别名,嵌套很深的命名空间可以这样方便使用
namespace ns:name::inline(since C++20)(optional) name {declarations } (since C++17)
嵌套定义
namespace A::B::C {...} 等于 namespace A{ namespace B { namespace C {...} } }namespace A::B::inline C {...} 等于 namespace A::B{inline namespace C {...} } inline 要在除了第一个 namespace 的前面
注意
命名空间必须在全局命名空间或者其他命名内定义,比如不能在函数内定义
命名空间的扩展 extension-namespace-definition
命名空间成员的定义会影响 name-lookup
Using-declarations
Introduce a name that is defined elsewhere into the declarative region where this using-declaration appears
using name 将 name 引入到特定命名空间,有点类似 Rust 模块系统的模块提升
using 之后 reopen 命名空间的内容不生效
不能引入命名空间,只能引入命名空间内的一个名字,并且在同一个 scope 内的所有限制都一样
Using-directives
Using-directives are allowed only in namespace scope and in block scope
Using-directive does not add any names to the declarative region in which it appears (unlike the using-declaration), and thus does not prevent identical names from being declared.