C++的命名空间 namespace
来源:互联网 发布:php mysql 长连接 编辑:程序博客网 时间:2024/05/17 03:47
C++的命名空间:c++中不仅各种库函数和类使用名称空间来界定,用户还可以自定义命名空间。命名空间是一种描述逻辑分组的机制,可以将在逻辑上属于同一集团的标识符放在同一个名称空间中。
1.讲代码 -> 认识命名空间:
#include<iostream>using namespace::std;namespace One {int M = 200;int inf = 10;}namespace Two{int x;int inf = 100;}int main(int argc, char *argv[]){using Two::x;cout << x << endl;x = -100;One::inf *= 1;cout << One::inf << endl;cout << One::M << endl;Two::inf *= 2;cout << Two::inf << endl;cout << x << endl;return 0;}
执行结果:
分析:
1> 由于加上了命名空间,变量访问 = 命名空间 + 标识符,如Two::inf;
2.外号 -> 命名空间别名:
namespace Geometry_Representation_and_Operation{int gNum;}namespace GRO = Geometry_Representation_and_Operation;GRO::gNum = 123;
不要将命名空间的别名定义在头文件中,否则所有包含该头文件的源文件都拥有该别名的定义,失去了别名的意义。
3.神秘 ->定义 匿名命名空间:
匿名命名空间没有名字。
namespace{ int gNum;}
在一个程序中,每一个源代码文件都可以定义自己的匿名命名空间。在众多的匿名命名空间中,只要保证每个标识符在各自的命名空间中唯一即可,而不需要保证在所有匿名命名空间中都唯一。这是因为一个匿名命名空间只对其所在文件有效,而对其他文件无效。而且匿名命名空间没有名字,所以在其他源代码中也无法引用。
Example:
////////////////////1.A.cpp文件////////////////////namespace{int gNum;}void fun(){gNum = 1314;}////////////////////2.B.cpp文件////////////////////namespace{int gNum;}int main(int argc,char *argv[]){gNum = 456; //使用B.cpp文件中的gNumreturn 0;}
3.浅谈区别 -> 匿名命名空间和static的区别:
用static关键字修饰的全局变量和函数的链接属性是内部链接,而在匿名命名空间中的全局变量和函数是外部链接。
提示:
一般,具有具有外部链接属性的全局变量和函数可以在其他文件中使用,而内部链接的全局变量和函数只能在本文件中使用。但是,由于不能跨文件访问匿名命名空间,所以虽然匿名命名空间中的全局变量和函数是外部链接,仍然不能跨文件访问。
代码实例:
#include<iostream>#include<cstdlib>using namespace std;template<char *p>struct foo //模板类foo{void bar(){};};static char a = 'a'; //静态全局变量namespace{char b = 'b';static char c = 'c';template<int NUM> static ABC //匿名命名空间中的模板{};void foobar(){const int x = 123; //局部变量,不具有外部链接属性//ABC<x>(); //导致编译错误}}int main(int argc,int *argv[]){//foo< &a >().bar(); //a是静态变量,术语内部链接,所以会导致编译错误 foo< &b >().bar(); //b是匿名命名空间中的全局变量,属于外部链接,可编译//foo< &c >().bar(); //c是匿名命名空间中的静态变量,属于内部链接,编译错误foobar(); //调用匿名命名空间中的全局变量return 0; //返回}
4.完美 -> 标准命名空间std
Example:
std::cout<< "Hello Word"<<std::endl;std::cin>>x;
阅读全文
0 0
- C++-namespace(命名空间)
- C++-namespace(命名空间)
- C++namespace命名空间
- C++namespace命名空间
- [C++]namespace命名空间
- C++:命名空间(namespace)
- C++namespace(命名空间)
- 【C#】 命名空间(Namespace)
- Namespace(命名空间)的使用
- 命名空间namespace的使用
- namespace命名空间的使用
- 命名空间namespace的用法
- NameSpace命名空间的学习
- 命名空间namespace的作用
- C++的命名空间 namespace
- C++/C++11中命名空间(namespace)的使用
- C++/C++11中命名空间(namespace)的使用
- C++-namespace命名空间(转)
- 敲代码时的一个小疑问
- matlab图像类型转换以及uint8、double、im2double、im2uint8和mat2gray等说明
- 11.5-关于用Python建网站
- Django中关于MVC和MVT
- Boxes And Balls CodeForces
- C++的命名空间 namespace
- PHP中防止SQL注入的方法
- golang中map和slice的查询速度比较,结果意想不到
- 小谈python 输出
- Android学习之SwipeRefreshLayout+RecyclerView+CardView
- java PushbackInputStream/Reader推回输入流
- Java 字符串(String类)
- 用C语言来实现_输入一个日期(年月日),计算是这一年中的第几天(集思广议)
- c++ primer 笔记,第三章