001-01 namespace命名空间
2018-08-25 本文已影响0人
有何不可12317
1 namespace 命名空间
1.1 历史
头文件中 C++ 标准对 ".h" 与 不带".h" 的区别 是为了兼容以前 C++ 代码 一个是为了支持新的标准
标准C++引入了关键字namespace(命名空间/名字空间/名称空间/名域),为了更好地控制标识符的作用域。
1.2 C++ 命名空间定义及使用语法
std是 C++ 标准命名空间,C++ 标准程序库中的所有标识符都被定义在std中。
比如标准库中的类iostream、vector
等都定义在该命名空间中。
使用时要加上using声明
(using namespace std)
或using指示,如:
std::string
std::vector<int>
1.3 C 与 C++中的区别
-
C中的命名空间
在C语言中只有一个全局作用域
C语言中所有的全局标识符共享同一个作用域
标识符之间可能发生冲突
-
C++中提出了命名空间的概念
命名空间将全局作用域分成不同的部分
不同命名空间中的标识符可以同名而不会发生冲突
命名空间可以相互嵌套
全局作用域也叫默认命名空间
1.4 定义 与 使用
定义
namespace name { ... } // 定义
使用
using namespace name; // 使用name命名空间
using name::varible; // 使用name命名空间中的varible变量
::varible; // 使用默认命名空间的varible变量
1.5 实例
namespace NameSpaceA
{
int a = 0;
}
namespace NameSpaceB
{
int a = 1;
namespace NameSpaceC
{
struct Teacher
{
char name[10];
int age;
};
}
}
int main()
{
using namespace NameSpaceA;
using NameSpaceB::NameSpaceC::Teacher;
printf("a = %d\n", a); // a = 0
printf("a = %d\n", NameSpaceB::a); // a = 1
NameSpaceB::NameSpaceC::Teacher t2;
Teacher t1 = {"aaa", 3};
printf("t1.name = %s\n", t1.name); // name = aaa
printf("t1.age = %d\n", t1.age); // age = 3
return 0;
}
1.6 总结
- 当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。若不引入using namespace std ,需要这样做。std::cout。
- c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。
- C++命名空间的定义: namespace name { … }
- using namespace NameSpaceA;
- namespce定义可嵌套。