C++入门:命名空间-创新互联
目录
创新互联公司是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括成都网站设计、成都做网站、电商网站制作开发、微信小程序开发、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!一.前言
C++关键字(C++98)总览:
一.作用域
二.命名冲突
三.命名空间
命名空间定义:
命名空间的嵌套定义:
四.命名空间的使用
五.命名空间的本质
一.前言
C++是从C语言延伸出来的编程语言,C++兼容了C语言百分之九十九的语法和特性,同时对于C语言(尤其是面对规模较大的工程时)中许多设计不合理的地方进行了优化并容纳进去了面向对象编程思想,增加了许多有用的库,以及编程范式等。
C++关键字(C++98)总览:一.作用域C++总计63个关键字,C语言32个关键字
红色方框圈出了C++新引入的关键字
二.命名冲突项目工程中的作用域分为全局作用域和局部作用域(C++中有命名空间的作用域)
全局作用域中声明的标识符在所有作用域中都有效,而且具有跨编译单元(一个.cpp文件就是一个编译单元)的链接属性(即在整个项目工程中可见)。(不考虑static修饰的情况)
三.命名空间当局部作用域和全局作用中有标识名重复定义时,遵循局部优先原则,这种情况可以理解为命名污染,此时程序不会报错。
当全局作用域中声明的标识符之间重复定义时,就会发生命名冲突,程序就会报错
面对巨大的项目工程,C语言没办法解决类似这样的命名冲突问题;
一个项目中,众多变量,函数,类以及结构类型的标识名如果重复出现就会发生冲突,而C语言对此并没有很好的解决方法(尤其是当工程项目特别大的时候),于是C++便引入了命名空间的语法,很好地避免了大工程中命名冲突或命名污染的问题。
命名空间定义:定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
命名空间中可以定义变量/函数/类型;
namespace bit { // 命名空间中可以定义变量/函数/类型 int rand = 10; int Add(int left, int right) { return left + right; } 一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中 }
命名空间不能定义在任何的函数(方法),类等的局部作用域中;
命名空间可以嵌套定义;
命名空间的嵌套定义:namespace N1 { int a; int b; int Add(int left, int right) { return left + right; } namespace N2 { int c; int d; int Sub(int left, int right) { return left - right; } } }
命名空间嵌套定义时,内层命名空间和外层命名空间即使存在相同的标识符,也不会发生命名冲突。
四.命名空间的使用同一个工程中允许存在多个相同名称的命名空间,编译器会将同名的命名空间合成同一个命名空间。命名空间本身的标识名不存在命名冲突的问题。
作用域限定符 ::
取消命名空间限制的关键字:using
一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中
五.命名空间的本质命名空间的使用有三种方式:
(1)在被访问的标识名前加命名空间名称及作用域限定符::
被嵌套命名空间中内容的访问
(2)使用using将命名空间中某个成员引入
(3) 使用using namespace+命名空间名称:解除相应命名空间对其中所有内容的作用域限制
第三种用法相当于是取消相应的命名空间,对待这种使用方式应持谨慎态度(尤其是在大项目中),推荐使用的访问命名空间内容的方法是第(1),第(2)种。
命名空间的本质作用是将全局作用域划分为多个独立的子作用域(命名空间限制了其中所有标识名的作用范围,但没有改变其中变量的生命周期),各个子作用域的内容无法被直接访问(编译和链接阶段都不能被直接访问),只有通过作用域限定符:: ,和using关键字才能访问到相应命名空间中的内容.
通过这样语法规则,C++很好地避免了编程中可能出现的命名污染和命名冲突问题。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
标题名称:C++入门:命名空间-创新互联
网页URL:http://scjbc.cn/article/djihje.html