当我们的程序势必会使用各种各样的库,这些库里会有各种各样的全局名 (不仅变量,类啊,函数啊,都可以是全局的) 为避免 name conflict,我们使用了 namespaces
Namespace Definitions
namespace cplusplus_primer {
class Sales_data { / * . . . * / };
Sales_data operator+(const Sales_data&, const Sales_data&);
class Query { / * . . . * / };
class Query_base { / * . . . * / };
} // like blocks, namespaces do not end with a semicolon
namespace 中可以放 declarations 和 definitions (再放一个 namespace 也是可以的)
namespace 只能放在 global scope 或 another namespace
Each Namespace Is a Scope
Scope 有的它也有
Namespaces Can Be Discontiguous, So…
写出来的定义分两种情况,要么 new 一个,要么 add 进去。因此
- namespace 中那些类定义、实体声明,可以放进 header file 中
- namespace 中那些实体就放进源文件里
Defining Namenspace Members
namespace 里可以直接用别的 menmber,namespace 外要域解析
跟 class 一样,解析过之后,就自己进入这个域了
Template Specializations
。。。
The Global Namespace
就是所有的 scope 之外的 scope (包括任何一个 namespace),并且每个文件都暗戳戳的存在于每个文件中。所有没有指明的都会被加进这个 global namespace
❓意思是说,如果一个在命名空间中的全局变量,是不会直接跟别的文件分享的吗?
::memeber_name
不指明全局命名空间来指明全局命名空间