博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++命名空间
阅读量:5263 次
发布时间:2019-06-14

本文共 1263 字,大约阅读时间需要 4 分钟。

命名空间

在一个给定作用域中定义的标识符必须是唯一的,对于多人协作开发的庞大而复杂的程序中难免发生名称冲突,在C语言中并不能提供语法层面上的解决方案,只能依靠人为的命名规范,例如使用特殊的命名前缀来解决这一困境,但这样会导致变量名称过长,不利于程序员编写和阅读程序,但C++提供了语法层面的解决方案,那就是使用命名空间来解决命名空间污染的问题。

  • 命名空间的定义:

    以关键字namespace开始,后接命名空间的名字,在名字后面接着是一对花括号,花括号扩住一块声明和定义,花括号中放入出现在全局作用域的任意声明:如类,全局变量(以及他们的初始化),函数(以及他们的定义),模版以及其它命名空间。注意:命名空间不能以分号结尾。

    例:

    例如:namespace mynamespace     {
    int nNum = .....; class CStu {
    ....}; }
  • 命名空间的定义可以不连续:

    作用域必须要连续,而命名空间可以分开在几个部分中定义,一个命名空间可以分散在多个源文件中,它门合起来构成一个完整的命名空间。

  • 在命名空间的外部引用命名空间

    方法1:使用 “命名空间名称::成员名” 引用命名空间成员,例如:
    mynamespace::nNum = 3;
    方法2:使用using声明后,直接访问,例如:
    using namespace mynamespace;
    nNum =3;
    这种方式虽然方便,但是当以这种方式引用的其它名称空间中有同名变量时就会发生歧义。

  • 全局命名空间:

    定义在全局作用域中的名字是定义在全局命名空间中的,全局命名空间是隐式的,它没有名字,可以显式指定使用全局命名空间中的成员:“::标识符”,例如:一个C++类中有一个名称
    为A的函数,全局定义中也有一个名称为A的函数,此时要想在类的其他成员函数中使用全局的函数,则需要在A前加上域运算符即可表示使用的是全局中的函数A

  • 未命名的名称空间:

    未命名的名称空间在定义时没有给出名称,未命名的名称空间以关键字namespace开头,后面没有名字,直接跟着一对花括号扩住的声明块,未命名的名称空间不可以跨文件定义和使用,可以在当前文件中不连续定义,引用未命名的名称空间的成员可以直接使用。C++语法提供这一特征主要是想取代在C语言时代中的静态声明,凡是使用static关键字的声明的文件作用域变量和函数都可以使用未命名的名称空间。

  • 命名空间别名:

    也可以为命名空间起别名,例如:

    namespace mystd = std;int main(){
    mystd::string str = "xxx"; return 0;}

    但是不能用typedef为命名空间取别名

C++中的作用域类型

  • 局部作用域
  • 全局作用域
  • 类域
  • 命名空间

转载于:https://www.cnblogs.com/UnknowCodeMaker/p/11119001.html

你可能感兴趣的文章
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>
HTML <select> 标签
查看>>
类加载机制
查看>>
tju 1782. The jackpot
查看>>
湖南多校对抗赛(2015.03.28) H SG Value
查看>>
hdu1255扫描线计算覆盖两次面积
查看>>
hdu1565 用搜索代替枚举找可能状态或者轮廓线解(较优),参考poj2411
查看>>
bzoj3224 splay板子
查看>>
程序存储问题
查看>>
Mac版OBS设置详解
查看>>
优雅地书写回调——Promise
查看>>
android主流开源库
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>