C++中namespace的使用

命名空间是一个逻辑单元,他可以包含在逻辑上相关的函数、变量和子命名空间.注意,子命名空间只能在命名空间中进行定义;其他的元素,可以在命名空间内部声明,在命名空间外部定义.命名空间可以重复定义,编译器取命名空间定义的并集作为最终的命名空间定义.用using namespace可以使得相关元素免于每次都写namespace::someelement.
命名空间(namespace)是一种描述逻辑分组的机制,可以将按某些标准在逻辑上属于同一个任务中的所有类声明放在同一个命名空间中.标准C++库(不包括标准C库)中所包含的所有内容(包括常量、变量、结构、类和函数等)都被定义在命名空间std(standard标准)中了.

操作方法

  • 01

    1.定义命名空间 有两种形式的命名空间--有名的和无名的. 命名空间的定义格式为:(取自C++标准文档) named-namespace-definition: namespace identifier { namespace-body } unnamed-namespace-definition: namespace { namespace-body } namespace-body: declaration-seqopt -------------------------------------------------- 有名的命名空间: namespace 命名空间名 { 声明序列可选 } 无名的命名空间: namespace { 声明序列可选 } ------------------------------------------------- 命名空间的成员,是在命名空间定义中的花括号内声明了名称.可以在命名空间的定义内,定义命名空间的成员(内部定义).也可以只在命名空间的定义内声明成员,而在命名空间的定义之外,定义命名空间的成员(外部定义). 命名空间成员的外部定义的格式为: 命名空间名::成员名 …… 例如: // out.h namespace Outer { // 命名空间Outer的定义 int i; // 命名空间Outer的成员i的内部定义 namespace Inner { // 子命名空间Inner的内部定义 void f() { i++; } // 命名空间Inner的成员f()的内部定义,其中的i为Outer::i int i; void g() { i++; } // 命名空间Inner的成员g()的内部定义,其中的i为Inner::i void h(); // 命名空间Inner的成员h()的声明 } void f(); // 命名空间Outer的成员f()的声明 // namespace Inner2; // 错误,不能声明子命名空间 } void Outer::f() {i--;} // 命名空间Outer的成员f()的外部定义 void Outer::Inner::h() {i--;} // 命名空间Inner的成员h()的外部定义 // namespace Outer::Inner2 {} // 错误,不能在外部定义子命名空间 注意: 不能在命名空间的定义中声明(另一个嵌套的)子命名空间,只能在命名空间的定义中定义子命名空间. 也不能直接使用“命名空间名::成员名 ……”定义方式,为命名空间添加新成员,而必须先在命名空间的定义中添加新成员的声明.另外,命名空间是开放的,即可以随时把新的成员名称加入到已有的命名空间之中去.方法是,多次声明和 定义同一命名空间,每次添加自己的新成员和名称.例如: namespace A { int i; void f(); } // 现在A有成员i和f() namespace A { int j; void g(); } // 现在A有成员i、f()、j和g() 还可以用多种方法,来组合现有的命名空间,让它们为我所用.例如: namespace My_lib { using namespace His_string; using namespace Her_vector; using Your_list::List; void my_f(String &, List &); } …… using namespace My_lib; …… Vector<String> vs[5]; List<int> li[10]; my_f(vs[2], li[5]);

  • 02

    2. 使用命名空间 作用域解析运算符(::) 对命名空间中成员的引用,需要使用命名空间的作用域解析运算符::.例如: // out1.cpp #include “out.h” #include <iostream> int main ( ) { Outer::i = 0; Outer::f(); // Outer::i = -1; Outer::Inner::f(); // Outer::i = 0; Outer::Inner::i = 0; Outer::Inner::g(); // Inner::i = 1; Outer::Inner::h(); // Inner::i = 0; std::cout << “Hello, World!” << std::endl; std::cout << “Outer::i = ” << Outer::i << “, Inner::i = ” << Outer::Inner::i << std::endl; } using指令(using namespace) 为了省去每次调用Inner成员和标准库的函数和对象时,都要添加Outer::Inner::和 sta::的麻烦,可以使用标准C++的using编译指令来简化对命名空间中的名称的使用.格式为: using namespace 命名空间名[::命名空间名……]; 在这条语句之后,就可以直接使用该命名空间中的标识符,而不必写前面的命名空间定位部分.因为 using指令,使所指定的整个命名空间中的所有成员都直接可用.例如: // out2.cpp #include “out.h” #include <iostream> // using namespace Outer; // 编译错误,因为变量i和函数f()有名称冲突 using namespace Outer::Inner; using namespace std; int main ( ) { Outer::i = 0; Outer::f(); // Outer::i = -1; f(); // Inner::f(),Outer::i = 0; i = 0; // Inner::i g(); // Inner::g(),Inner::i = 1; h(); // Inner::h(),Inner::i = 0; cout << “Hello, World!” << endl; cout << “Outer::i = ” << Outer::i << “, Inner::i = ” << i << endl; }

(0)

相关推荐

  • 不用软件就能恢复过来回收站中误删除文件

    有时候你把不需要的文件放到回收站去先储存着,但有的人比较急性,刚放进回收站就直接删除了,当转过头需要的时候就后悔莫及。这样误删除文件的例子出现很多。一般来说,要把回收站中误删的文件恢复,除非借助软件。 ...

  • Windows中无法删除桌面IE图标怎么办

    Windows中无法删除桌面IE图标的解决方法 解决方法其实并不难,打开注册表, 转到如下图的位置,详细地址在图片最下面: 需要注意的是,你需要在NameSpace中逐个查看各个项目的数据值, 显示为 ...

  • 屏蔽Win XP中不需用到的功能

    虽然Windows XP在功能和易用性比以往的系统增强很多,但更多的功能就意味着需要占用更多的系统资源。其实Windows XP一些自带的功能并不比第三方软件强,为了使系统更清爽,笔者收集了一些撤消W ...

  • win10系统中怎么在home文件夹中添加库

    win10怎么在home文件夹中添加库呢?在win10系统中,我们点击下方的“文件管理器”按钮时,它打开的并不是库文件夹,而是全新的Home主页文件夹,里面罗列了我们经常访问的文件夹以及文件,这让很多 ...

  • win10系统在Home主页文件夹中添加库的小技巧

    在win10系统中,我们点击下方的“文件管理器”按钮时,它打开的并不是库文件夹,而是全新的Home主页文件夹,里面罗列了我们经常访问的文件夹以及文件,这让很多用户还不适应,那么怎么在home文件夹中添 ...

  • Win8.1计算机中怎么去掉视频.图片.文档等6个文件夹

    细心的朋友会发现,在Win8.1这台电脑(计算机)中,除了我们最熟悉的磁盘外,还新增了视频、图片、文档、下载、音乐、桌面这6个文件夹。不少网友举觉得这6个文件夹其实并没什么用,想要去除删掉。那么Win ...

  • 在C/C++语言中使用正则表达式

    本文所有的内容都来自网络,加上一些个人的理解,不保证正确性,欢迎批评指正 说起正则表达式(Regular Expression),也许有的朋友天天都在使用,比如grep、vim、sed、awk,只是可 ...

  • Windows XP系统中终极优化设置方法介绍

    一、系统优化设置 ◆1、系统常规优化 1)关闭系统属性中的特效,这可是简单有效的提速良方。点击开始→控制面板→系统→高级→性能→设置→在视觉效果中,设置为调整为最佳性能→确定即可。 2)“我的电脑”- ...

  • win7系统中如何解决我的电脑不显示扫描仪和摄像头问题

    最近笔者遇到了一个电脑故障:在“我的电脑”中不显示扫描仪和摄像头。起初以为驱动没装好,但经过仔细研究,终于找到原因。 可能一: Windows Image Acquisitionm服务没有被启动 1, ...