C++名称空间

需要名称的单元:        变量、函数、结构、枚举、类、类和结构的成员。

随着项目大了,名称难免重复,这在c++里就叫冲突;另外使用多个厂商的类库时,同一个名称下的东西可能不一样,因此造成冲突;

为了解决名称冲突的问题,C++提供了名称空间工具,其实就是给每个名字加一个作用域,比如说有海里有两只派大星,一只来自大西洋,一只来自太平洋,那么给他们加上所属海就不会搞不清他们谁是谁了;

传统C++名空间

    声明区域+潜在作用域+作用域           前者包含后者

作用域:  变量对程序而言可见的区域

潜在作用域:从声明点开始,到声明失效的未知这一连续区域

声明区域:    变量可以进行声明的地方

新的C++名空间

名称空间:声明名称的区域    一个名称区域不会和另一个名称区域中的名称发生冲突

  1.      可以将新的名称单元加入到已有的名称空间中
  2.      用户自定义空间          未命名的名称空间(提供了链接性为内部的外部静态变量的替代品)
  3.      名称空间可以嵌套在另一个名称空间中
  4.      namespace{  }   创建
  5.      ::                     作用域解析运算符
  6.      using                   使用using让特定空间的名称可用   虽然using编译指令将名称空间的名称视为在函数外生命的,但他        不能直接使得该文件中的其他函数也能使用这些名称
  7.      一般来说,使用using声明比使用using编译指令更安全,这是由于它只导入特定的名称
  8.      如果与局部名称发生冲突,局部名称会覆盖名称空间版本
  9.      在名称空间中声明的函数名的作用域为整个名称空间,因此函数定义和声明必须位于同一个名称空间中

名称空间及其前途:

  • 使用声明的已命名的名称空间中的变量,而不是使用外部全局变量/静态全局变量
  • 如果开发了一个函数库或类库,将其放在一个名称空间中。提倡将标准函数库放在名称空间std中,例如C++头文件cmath把各种数学库函数放在名称空间std中
  • 仅将using的编译指令作为一种将旧代码转换为使用名称空间的权宜之计
  • 不要再头文件中使用using编译指令,这样做掩盖了要让哪些名称有用;另外,包含头文件的顺序可能影响程序的行为,如果要用using应将其放在#include<>之后
  • 导入名称,优先使用作用域解析符或者using声明
  • using声明,首选将其作用域设为局部

头文件名称的变化反映了有没有使用名空间,如  iostream.h没有使用,而iostream使用了std名空间

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值