c++命名空间的使用

本文介绍了C++中命名空间的概念、定义、使用方法以及其在解决全局名字冲突、模块化编程中的作用。特别强调了std命名空间的使用和避免全局名字污染的最佳实践。
摘要由CSDN通过智能技术生成

一.命名空间概念及应用

//参考c++面向对象程序设计

在c++中,我们在使用多文件多人合作完成项目时,同一作用域的每个实体必须拥有唯一的名字,如果不同文件中定义了相同名字的变量或者函数,或者变量名与库函数中的函数或者关键字起了命名冲突,就会报错我们不得不注意这些,然而这样很费时间精力,于是在c++中引用了一个概念:命名空间,即将同一部分的变量和函数划分到一个区域,形成一个新的作用域,而且由于C++大量存在的标识符(变量、函数和类的名称),并且这些标识符处于全局作用域中,为避免命名冲突或命名污染,namespace对这些标识符的名称进行了本地化,使编译器在全局作用域中不直接检索到这些标识符。这样在不同的命名空间中就可以使用相同的名字,同样可以募集一群具有一定属性意义的变量函数的集合。

作用:

1.解决全局名字冲突的问题

2.将逻辑上相关的一组定义或声明组织在一起,实现模块化的程序设计

二.命名空间的定义及使用

二-1-命名空间的定义

命名空间通常使用namespace关键字定义,如图定义一个名字为universe的命名空间,其中可包含函数与变量,语法形式如下:

命名空间中声明的实体被称为命名空间的成员,成员的名字会自动由命名空间的名字限定,例如universe命名空间的两个成员名字分别为universe::a,universe::rand。不同用户可以声明各自的命名空间不同命名空间中的成员可以有相同的名字。如:

命名空间的开放性

即可以多次使用同一个标识符来定义命名空间,这些定义会被累积起来。例如:

命名空间的嵌套定义

匿名命名空间

每个源文件中都可以包含一个匿名的命名空间,在这个源文件中,匿名命名空间的成员可以不加限定名使用,例如:

模块化程序设计

在头文件中将一组相关的声明放在同一个命名空间中,以表示他们逻辑的关联,在其中放相关的声明,在源文件中实现定义。

二-2-命名空间成员的使用

1.命名空间别名

namespace 别名 = 命名空间名;

2.using 声明

using声明将一个命名空间的成员引入特定作用域中,在此声明后,该成员可以不加前缀在作用域中使用。语法形式为:

using 命名空间名::成员名

3.using指令

using指令可以将一个命名空间的所有成员引入到特定作用域,这些成员都可以不加前缀使用。

using namespace 命名空间名;

三-标准命名空间std

c++标准库中的所有内容都是在一个名为std的命名空间中声明和定义的。使用标准库要包含相应的头文件,格式为:

#include <header>

例如使用标准I/O流库的程序

#include <iostream>

int main()

{

cout << "Hello ,World"<<endl;

}

但是这段代码不能通过编译,因为cout和endl都是标准命名空间std的成员,所以要加std前缀限定:

std::cout << "Hello,World"<<std :: stdl;

这个错误还可以通过using指令或using声明来修正:

使用namespace 是为了避免全局名字冲突,所以不要将using指令放在头文件中,以避免因为头文件包含而引起的新的全局名字的冲突。因此这种写法也很常见:

using指令只在main函数中起作用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值