namespace关键字
namespace的出现是为了解决命名冲突的问题,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好地控制标识符的作用域。
namespace的语法
(namespace只能在全局作用域中定义,在函数内、类内、结构体内等处定义是不对的)
namespace zhang{
//内容
}
namespace的用法
1.引用变量。
2.引用函数。
3.引用类、结构体。
4.namespace中可以嵌套定义namespace。
5.函数可以分离实现。
6.namespace是开放的,可以随时把新的成员加入已有的命名空间中。
例子:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
namespace xi{
int atc = 200;
void test1(){
cout << "test1在执行" << endl;
}
void test2();
class Person{
public :
Person(){
cout << "Person类" << endl;
}
};
namespace feng{
int def = 300;
}
}
void xi::test2(){
cout << "test2在执行" << endl;
}
namespace xi{
int time = 20;
}
int main(){
xi::Person p;
xi::test1();
xi::test2();
cout << "atc=" << xi::atc << endl;
cout << "def=" << xi::feng::def << endl;
cout << "time=" << xi::time << endl;
system("pause");
return EXIT_SUCCESS;
}
结果:证明结论正确
using关键字
using关键字可以使得namespace中存储的东西可用
示例:
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
namespace xi{
int atc = 200;
int def = 300;
void test1(){
cout << "test1在执行" << endl;
}
void test2();
class Person{
public :
Person(){
cout << "Person类" << endl;
}
};
}
void xi::test2(){
cout << "test2在执行" << endl;
}
namespace zhang{
int atc = 20;
}
using namespace std;
using namespace zhang;
using namespace xi;
int main(){
Person p;
test2();
cout << "xi::atc" << xi::atc << endl;
system("pause");
return EXIT_SUCCESS;
}
但是为什么引用atc变量时还是要加上xi::呢,是因为名为zhang和名为xi的命名空间中都有atc这个变量,此时需要指明引用的是哪个命名空间中的变量。(函数、类、结构体同理)。