C++提供了一种称为**名字空间(namespace)**的机制,一方面表达某些声明是属于一个整体,另一方面表明它们的名字不会与其他名字空间中的名字冲突。
例如,我们尝试利用自己定义的"My_code"名字空间进行试验:
namespace My_code{ //定义My_code名字空间
class complex{/*...*/};
complex sqrt(complex);
//...
int main();
}
int My_code::main(){ //这个main()函数隶属于上面自己定义的My_code名字空间的main()函数,
complex z{1,2};
auto z2 = sqrt(z);
std::cout<<'{'<<z2.real()<<','<<z2.image()<<"}\n";
//...
}
int main(){//这个main()函数不是My_code名字空间的main()函数,只是全局名字空间中的函数。
return My_code::main(); //这句代码表示回调My_code名字空间的main()函数,
}
通过将代码放在名字空间My_code中,就可以确保我们的名字不会和名字空间std中的标准库名字冲突。因为标准库确实支持complex算术运算,所以提前设置这样的预防措施是好的。
要想访问其他名字空间中的某个名字,最简单的方法是在这个名字前加上名字空间的名字作为限定 ( 例如std:cout 和 My code:main)。 “真正的 main() ”定义在全局名字空间中,换句话说,它不属于任何自定义名字空间、类或函数。要想获取标准库名字空间中名字的访问权,我们应该使用using指示:
using namespace std;
名字空间主要用于组织较大规模的程序组件,最典型的例子是库。使用名字空间,我们就可以很容易地把若干独立开发的部件组织成一个程序。