名称空间的作用
名称空间主要用来防止名称重名。
比如几十上百万的代码里,肯定很多模块都有类似name copy sort这样的变量名或者函数名。
如何区分他们呢?
建立名称空间以隔离可能产生的同名问题
//定义一个名称空间F,并在里面添加两个函数start stop
namespace F {
void start(){}
void stop(){}
}
namespace G {
void start(){}
void stop(){}
}
//我们也可以在std名称空间中添加类,虽然一般不这么做,这里仅仅用于帮助我们理解什么是名称空间
namespace std {
struct Student{};
}
int main()
{
F::start();//通过名称空间名称F访问该名称空间中的函数start,下同
F::stop();
G::start();
G::stop();
std::Student my;
using namespace F;//将名称空间F中的名称暴露出来,不需要使用F::也可以访问
start();//再次执行名称空间F中的start函数
return 0;
}
名称空间 std
std 表示 C ++ 标准模板库(standard template library)
为了防止和我们自己写的代码变量名,或者类型名重名,C++ 把标准库的内容都放到了这个名称空间中了。比如,cout , cin,endl 。
std代码的组织方式
以标准库std::string std::cin std::cout 为例,来说明名称空间和文件包含之间的关系
#include<string> 中的string实际上是一个文件的名字
string 文件 内容大致如下
namespace std {
template<T> class string{
};
}
cout 所在的 iostring 文件 内容大致如下
namespace std {
extern ostream cout;
}
可以看出 一个名称空间 std 可以跨越很多个代码文件,把它想包含的类,对象都包含进来。
using
每次使用名称空间的对象都加上名称空间的名字,比如std::cout,的确也麻烦。
比如,如果不使用 using namespace std; 的话,Hello World 的 代码像下面这样:
#include<iostream>
int main(void)
{
std::cout<<"Hello World!"<<std::endl;
return 0;
}
这时候可以使用using namespace std;来直接使用cout对象:
#include<iostream>
using namespace std;
int main(void)
{
cout<<"Hello World!"<<endl;
return 0;
}
本文介绍了C++中的名称空间概念,强调其在解决命名冲突中的作用。通过示例展示了如何创建和使用名称空间,特别讨论了标准库std的使用,包括std::cout和std::endl等。还解释了std代码的组织方式,以及using关键字的用途,帮助读者更好地理解和应用C++的名称空间机制。
895

被折叠的 条评论
为什么被折叠?



