Effective_C++:28、尝试切割global namespace(全局命名空间)
程序员文章站
2022-07-15 12:23:52
...
28、尝试切割全局命名空间
1、命名空间的使用
有三种方式使用命名空间:
1.导入命名空间的所有符号。若存在同名的临时变量,会掩盖命名空间的符号。
using namespace std;
2.导入命名空间的某个符号。若存在同名的临时变量,编译器会发生错误,名称冲突。
using std::cout;
3.使用符号时,用作用域操作符来指明命名空间。
std::cout << "Hello, world!";
2、为啥使用命名空间
在大型项目中,有多个文件,会定义很多全局变量,若存在同名的全局变量时,会发生名称冲突的问题。
一个方法是对每个文件的全局变量加上独特的前缀,保证不会出现同名的问题。然而,如此,可能使得名称变得很长。
另一个方法是使用命名空间。然后通过那三种方式去使用他。
3、尝试切割全局命名空间
尝试切割全局命名空间,即是使用命名空间来防止名称冲突。对于名称冲突的,则加命名空间来使用这些名称;对于没有名称冲突的,若是型别名称,用typedef,使得型别名称为命名空间的型别名称的同义词。若是static对象,则声明一个该对象的引用。若是static函数,用const指针代替。
//切割全局命名空间
namespace sdm {
int label;
static const double BOOK_VERSION;
class Handle { ... };
static Handle& getHandle();
...
}
const double BOOK_VERSION = 2.0;
//切割全局命名空间
namespace another {
int label;
...
}
//使用名称符号
typedef sdm::Handle Handle;
const double& BOOK_VERSION = sdm::BOOK_VERSION;
sdm::Handle& (* const getHandle) () = sdm::getHandle;
上一篇: 《Effective C++》读书笔记
下一篇: FourSum