命名空间
c++中,名称可以是符号常量、变量、宏、函数等。为了避免在大规模程序的设计中,以及在程序员使用各种各样的c++库时,这些标识符的命名发生冲突。标准c++引入了关键字namespace(命名空间),能够更好地控制标识符的作用域。
此外,std是c++标准命名空间,c++标准程序库中的所有标识符都被定义在std中,比如标准库中的类iostream、vector等都定义在该命名空间中,使用时要加上声明using namespace std,或者using指示(std::string、std::vector)。
- 自定义一个命名空间:
namespace spaceA
{
int g_a = 10;
}
int main(void)
{
using namespace spaceA;
//using spaceA::g_a
}
- 如果命名空间再嵌套命名空间,必须引用到最里面的命名空间,或者会产生歧义;或者在命名空间里using space。
namespace spaceB
{
namespace spaceC
{
struct teacher
{
int id;
char name[64];
}
}
namespace spaceD
{
struct teacher
{
int id;
char name[64];
}
}
//using namespace spaceC;
//这一句可以令main函数声明spaceB的时候直接调用spaceC中的teacher
}
int main(void)
{
//1.
using spaceB::spaceC::teacher;
//2.
//spaceB::spaceC::teacher t1;
//3.
//using spcaeB;
//spaceC::teacher t1;
//必须引用到最里面的命名空间
//using spaceB
//teacher t1;//报错产生歧义,因为spaceB里面有spaceC和spaceD两个命名空间,同时包含teacher。
}