61 C++的名称空间
1. 为什么要使用 namespace
void print(const char* text)
{
std::cout << text << std::endl;
}
void print(const char* text)
{
std::string temp = text;
std::reverse(temp.begin(),temp.end());
std::cout << temp << std::endl;
}
这里有两个函数签名一样的函数,这两个的symbol(符号)是相同的,如果放在一个文件里的话会产生链接错误、编译错误。那如果我们确实想要两个 print 函数,或者使用另一个已经定义了 print 函数的库,但是我们想有自己的 print 函数。 C 语言没有 namespace,比如使用 GLFW 库(C 语言的 OpenGL 库),调用的每个函数名都是用 GLFW 开头的。 所以namespace(名称空间)的主要目的就是避免命名冲突。
可以把命名空间放在一行,这样多层嵌套时观感会好些:
namespace apple { namespace functions {
void print(const char* text)
{
std::cout << text << std::endl;
}
} }
::
是命名空间的操作符,类也是一种命名空间,这就是为什么访问另一个类内部的类等成员时也用::
来调用
还可以单独引入函数:
还可以给命名空间起别名:
尽量将 namepace 限制在一个小的作用域下,一定不要加在头文件里。