C++中有两个比较基础又重要的概念,一个是作用域,另一个是生存期。作用域顾名思义就是作用的区域,分为函数原型作用域、局部作用域、类作用域和命名空间作用域,它们的作用范围按此顺序变大。生存期顾名思义就是变量从创建到消亡的这段时间,分为静态生存期和动态生存期。如果变量的生存期与系统程序的运行期相同,则该变量就具有静态的生存期。在所有大括号对之外定义的变量具有静态生存期,命名空间作用域都在大括号外,所以其变量具有静态生存期。在局部作用域中用static声明的变量也具有静态生存期。除了这两种情况之外的变量都具有动态生存期。

  命名空间建立了一些相互隔离的作用域,且这些作用域里的变量都具有静态生存期。

  namespace产生的原因

  C++中采用的是单一的全局变量命名空间。在这单一的空间中,如果有两个变量或函数的名字完全相同,就会出现冲突。命名空间就是ANSIC++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突。

  如果在头文件head1.h定义了全局变量string user_name;然后再在头文件head2.h也定义了string user_name,或者调用的某个库中已经定义了这个全局变量,系统在编译的时候就会报重复定义的错误。这个时候可以用extem string user_name来解决编译问题,但这个时候string user_name的作用域就从head1.h扩展到了head2.h,也许这并不是我们想要的情况,我们或许想要得到的是两个不同的全局变量,只是名字一样而已。

  namespace使用

  使用时先把变量定义在两个不同的命名空间中。

  namespace XXX

  {

    string user_name;

  }

   namespace YYY

  {

    string user_name;

  }

  然后通过命名空间限定读取:

  XXX::user_name="asd";

  YYY::user_name="qwe";

  一个命名空间中可以包括:变量(可以带有初始化);常量;数(可以是定义或声明);结构体;类;模板和命名空间(在一个命名空间中又定义一个命名空间,即嵌套的命名空间)。但命名空间中不可以包含命令行,如#include,不然会报错。

  使用时可以包含整个命名空间using namespace XXX; 也可以只包含其中的某个变量using XXX::user_name; 这样可以减少编译的大小。

转载于:https://www.cnblogs.com/zhengxinwei/p/7471529.html

命名空间 namespace相关推荐

  1. C++中的命名空间namespace

    1.Cpp中的命名空间 假设这样一种情况,当一个班上有两个名叫Zara的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等.同样的情况, ...

  2. PHP 命名空间(namespace)

    2019独角兽企业重金招聘Python工程师标准>>> PHP 命名空间(namespace) PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Ja ...

  3. PHP命名空间(Namespace)的使用详解(转)

    对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...

  4. 为 Vue3 学点 TypeScript, 命名空间(namespace)是什么?

    往期目录 第一课, 体验typescript 第二课, 基础类型和入门高级类型 第三课, 泛型 第四课, 解读高级类型 第五课, 命名空间(namespace)是什么 什么时候要用命名空间? 如果你发 ...

  5. php命名空间 动态 new,PHP命名空间(namespace)的动态访问及使用技巧_php实例

    PHP的命名空间(namespace)是PHP 5.3中加入最重要的一个新特性,这个概念在C#中已经很早就有了,php中的namespace其实和c#的概念是一样的. 一.动态访问命名空间的元素 na ...

  6. 【C++ 语言】命名空间 ( namespace | 命名空间定义 | 命名空间嵌套 | 域作用符 | 与 include 对比 )

    文章目录 命名空间简介 自定义命名空间 自定义嵌套命名空间 域作用符 命名空间 与 include 区别 命名空间定义与使用完整代码 命名空间简介 命名空间 ( namespace ) : 1.命名空 ...

  7. C++命名空间namespace

    1.namespace的作用 命名空间namespace是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的重名冲突,不同的命名空间中可以存在名字相同的标识符而不会相互干扰,防止名字污 ...

  8. 【小白学习C++ 教程】十三、C++命名空间namespace

    @Author:Runsen 文章目录 访问命名空间 嵌套命名空间 命名空间别名 任何C++程序都有声明namespace,比如下面的C++程序没有声明namespace int main() {in ...

  9. php namespace原理作用,php 命名空间(namespace)原理与用法实例小结

    本文实例讲述了php 命名空间(namespace)原理与用法.分享给大家供大家参考,具体如下: 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致 ...

  10. PHP命名空间(Namespace)的使用详解

    对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...

最新文章

  1. python控制手机发短信_python-在python3中使用容联云通讯发送短信验证码
  2. VB6.0 怎样启用控件comdlg32.ocx
  3. mysql my.cnf参数配置_MySQLmy.cnf参数配置优化详解
  4. libc glibc glib 的关系
  5. DataList控件分页
  6. 微信公众平台开发问答 【转发】
  7. python读取mysql以html形式输出_python从mysql数据库提取出来的数据怎么在html里显示...
  8. 导出期刊对应格式的参考_3.2怎样按照某个期刊的格式要求生成文后的参考文献.PDF...
  9. linux伊甸园论坛,tcsh问题 - Mandrake/Mandriva - Linux伊甸园论坛
  10. 安全模块之FIPS 140-2标准和国密标准对比
  11. 计算机怎么升级64位操作系统,32位的电脑系统怎么升级成64位?
  12. Git问题Everything up-to-date正确解决方法
  13. cloudstack vpc network egress-ingress rules
  14. NRF52840 和电脑 进行蓝牙通信
  15. vue3+vite环境搭建 vue3+vite实战
  16. jsoncpp写法更新
  17. SSL证书、 der、 cer、 pem区别
  18. java图书推荐推荐管理系统
  19. 非线性悬架matlab,基于MATLAB/Simulink的油气悬架非线性阻尼特性分析
  20. 前端实现docx、pdf格式文件在线预览

热门文章

  1. 【php-laravel框架】第二节:laravel常用的扩展包汇总及安装教程
  2. php 解压rar文件怎么打开方式,php 解压rar文件
  3. 基于java员工管理系统设计(含源文件)
  4. Nacos笔记-对Nacos初步认识
  5. Oracle笔记-Oracle Net Manager添加监听IP(当服务器IP变化时要用)
  6. Python笔记-UiSelector文本定位方式(3种定位并点击)
  7. Nginx笔记-使用Nginx给vue应用设置一个代理
  8. 6.4.3树和森林的遍历
  9. ad采样做按键开关_电池应用中的电流采样电阻设计
  10. vue弹出层滑动禁止背景跟着滑动_vue移动端弹起蒙层滑动禁止底部滑动操作