C++ 命名空间、类型转换运算符和智能指针详解
1. 命名空间(Namespaces)
在大型程序中,代码分散在多个文件且由不同程序员编写,名称冲突的概率会增加。例如,在 queue.h
文件中定义了 Queue
类,而在使用的某个库(如 game.h
)中也使用了相同的名称,编译时就会因 Queue
类的重复定义而失败。为避免此类名称冲突,C++ 引入了命名空间机制。
命名空间是一个具有自己作用域的命名区域,可用于存放程序实体(如类、函数等)。它能将程序实体组织成逻辑组,防止与外部声明的名称发生冲突。例如,可以创建 Network
命名空间,将与网络协议和设备相关的类放入其中。
1.1 创建命名空间
使用 namespace
关键字创建命名空间,示例如下:
namespace A
{
int var;
double d = 1.2;
int f();
struct S {...};
class C {...};
} // 不需要分号
在命名空间内部可以声明变量、函数、模板、类和对象等元素。命名空间可以在全局命名空间或另一个命名空间内声明,但不能在块(如函数)内声明。每个命名空间成员的作用域从其声明点延伸到命名空间的末尾。
可以使用命名空间名称添加新元素,例如: