笔记:C++命名空间

内容来自C++ primer 5th

大型程序经常会使用多个独立开发的库,这些库又会定义大量的全局名字,不可避免地会发生名字冲突的情况。

命名空间:为防止名字冲突提供了更加可控的机制。命名空间分隔了全局命名空间,其中每个命名空间是一个作用域。通过在某个命名空间中定义库的名字,可以避免全局名字的冲突。

定义:

namespace space_name{

  //声明和定义,只要能出现在全局作用域中的就能在命名空间中

  //主要是类,变量,函数,模板,其他命名空间

}

命名空间结束不用分号。

命名空间的名字也必须在定义它的作用域内保持唯一。

命名空间不能定义在类和函数内部。

每个命名空间都是一个作用域。

命名空间的定义可以分成几个部分,不用一次性定义完。

比如:

namespace nsp{
}

可能是定义了一个名字为nsp的新命名空间,也可能是为已经存在的命名空间添加一些新成员。

模板特例化必须定义在原始模板所属的命名空间中。

内联命名空间

C++11新标准

和普通的嵌套命名空间不同,内联命名空间中的名字可以被外层命名空间直接使用,也就是说,不用在内联命名空间的名字前加上表示该命名空间的前缀。

inline namespace space_name{

}

inline必须出现在命名空间第一次定义的地方,以后再打开命名空间的时候可以写inline,也可以不写。

未命名的命名空间

指关键字namespace后面直接是{}

未命名的命名空间中定义的变量拥有静态生命周期:在第一次使用前创建,直到程序结束才销毁。

时间: 2024-10-19 10:02:26

笔记:C++命名空间的相关文章

thinkphp学习笔记8—命名空间

原文:thinkphp学习笔记8-命名空间 新版本(3.2)中采用命名空间的方式定义和加载类库文件,解决多个模块之间的冲突问题,并实现了更加高效的自动加载机制. 需要给类库定义所在的命名空间,命名空间的路径和类库文件的目录一致,就可以实现类的自动加载,例如Org\Util\File类的定义为 namespace Org\Util; class File { } 其所在的路径是ThinkPHP/Library/Org/Util/File.class.php,我们实例化该类写法如下: $class

C++Primer笔记(2)::命名空间

大型程序一般都是分为多个模块,由多人协作来进行开发的,其中还不可避免的会用到库.而各个模块代码以及库中会定义大量变量,而大量变量的命名,不可避免的会遇见“重名”的问题.“重名”的情况我们称之为命名空间污染.就像你的同学重名了(这也是没有办法的事),比如同班有两个李明(此名重名率极高),这个时候当你们提到其中某一个时,聆听者就搞不懂到底说的是哪个李明了,这个时候就出现了命名空间污染.而这个时候,命名空间就派上用场了,而所谓的命名空间事实上就相当于给作用域起了一个名字,然后你可以在这个作用域中进行各

PHP学习笔记4-类/命名空间/成员方法/类方法

命名空间 namespace   类 class创建文件Hello.php,namespace是jikexueyuan: 1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: Administrator 5 * Date: 2015/6/28 6 * Time: 13:41 7 */ 8 //命名空间 9 namespace jikexueyuan; 10 11 12 class Hello { 13 public function sayHello(

读经典——《CLR via C#》(Jeffrey Richter著) 笔记_命名空间和程序集的关系

命名空间和程序集不一定相关 1. 同一个命名空间中的各个类型可能是在不同的程序集中实现的.(System.IO.FileStream在MSCorLib.dll程序集中,而System.IO.FileSystemWatcher在System.dll程序集中) 2. 同一个程序集中,也可能包含不同命名空间中的类.(System.Int32和System.Text.StringBuilder类型都在MSCorLib.dll程序集中)

命名空间 - PHP手册笔记

原文:命名空间 - PHP手册笔记 概述 命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念,比如在操作系统中,目录用来将相关文件分组,对于目录中的文件来说,目录就扮演了命名空间的角色.这个原理应用到程序设计领域就是命名空间的概念.PHP 5.3后的版本开始支持命名空间. 定义命名空间 命名空间通过关键字namespace来声明.任何合法的PHP代码都可以包含在命名空间中,但只有类.函数和常量这三种类型受命名空间的影响. 在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的de

C# L该系统的应用istView简单的图像浏览器

最近有同学问我怎么用ListView加载图像列表,在...前面"C#系统中的应用"于TreeView+ListView+ContextMenuStrip控件实现树状图显示磁盘文件夹,并在ListView中显示文件的具体信息.这里准备简介下给同学讲述的怎样使用ListView+ImageList控件实现简单的图片浏览器知识.        第一步 设计界面框架例如以下图所看到的,同一时候加入ImageList控件(不可见) 注意:设置ListView控件的Anchor属性为Top,Bot

C# 系统应用之ListView实现简单图片浏览器

最近有同学问我如何使用ListView加载图片列表,前面在"C#系统应用"中TreeView+ListView+ContextMenuStrip控件实现树状图显示磁盘目录,并在ListView中显示文件的详细信息.这里准备简单介绍下给同学讲述的如何使用ListView+ImageList控件实现简单的图片浏览器知识.        第一步 设计界面框架如下图所示,同时添加ImageList控件(不可见) 注意:设置ListView控件的Anchor属性为Top,Bottom,Right

C++ Primer 学习笔记_93_用于大型程序的工具 --命名空间[续2]

用于大型程序的工具 --命名空间[续2] 五.类.命名空间和作用域 名字的可见性穿过任意嵌套作用域,直到引入名字的块的末尾. 对命名空间内部使用的名字的查找遵循常规C++查找规则:当查找名字的时候,通过外围作用域外查找.对命名空间内部使用的名字而言,外围作用域可能是一个或多个嵌套的命名空间,最终以全包围的全局命名空间结束.只考虑已经在使用点之前声明的名字,而该使用仍在开放的块中: namespace A { int i; namespace B { int i; int j; int f1()

C++ Primer 学习笔记_94_用于大型程序的工具 --命名空间[续3]

用于大型程序的工具 --命名空间[续3] 六.重载与命名空间 正如我们所见,每个命名空间维持自己的作用域,因此,作为两个不同命名空间的成员的函数不能互相重载.但是,给定命名空间可以包含一组重载函数成员. 1.候选函数与命名空间 命名空间对函数匹配有两个影响.一个影响是明显的:using声明或using 指示可以将函数加到候选集合.另一个影响则微妙得多. 正如前节所见,有一个或多个类类型形参的函数的名字查找包括定义每个形参类型的命名空间.这个规则还影响怎样确定候选集合,为找候选函数而查找定义形参类

js框架设计1.1命名空间笔记

借到了司徒正美的写的js框架设计一书,司徒大神所著有些看不太懂,果然尚需循序渐进,稳扎js基础之中. 第一张开篇司徒阐述了种子模块的概念 种子模块亦为核心模块,框架最先执行模块,司徒见解应包含:对象扩展.数组化,类型判定,简单事件的绑定和写在,无冲突处理,模块加载与domReady.应具有扩展性.常用.稳定等特点. 1.1 命名空间 一观各大框架,基本是定义一个全局变量作为命名空间,如Ext的Ext等,大体抽象取例为: if(typeof(Ten)==='undefined'){ Ten={};