c++命名空间 namespace学习
我们为什么需要命名空间?
我们假设一下这种情况,在A班中,有一名同学叫小明,在B班中,也有一名同学叫小明,现在两个班的同学一起聚会,老师找A班的小明,这时候他在人群中喊一声小明肯定两个小明都过来了,这个时候B班小明就白跑一趟了,为了避免这种尴尬,老师只要喊“A班的小明过来一下就行了”。在c++已经其他某些语言中,也是这个道理,在很多大型项目中,由于可能多人一起开发,难免出现相同名字的变量,这个时候我们就需要namespace了,在调用同名变量时,另外加上它的namespace,这样就避免了出错。
1.命名空间实例
//namespace study #include<iostream> using namespace std; namespace first_space{ void func(){ cout<<"my first_space"<<endl; } } namespace second_space{ void func(){ cout<<"my second_space"<<endl; } } int main(){ first_space::func(); second_space::func(); }
2.using指令
您可以使用 using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。
//namespace study #include<iostream> using namespace std; namespace using_space{ void beusing(){ cout<<"I am using"<<endl; } } using namespace using_space; //namespace using_space{ // void beusing(){ // cout<<"I am using"<<endl; // } //} int main(){ beusing(); }
这里注意using namespace必须在被调用空间定义后再使用。
using 指令也可以用来指定命名空间中的特定项目。例如,如果您只打算使用 std 命名空间中的 cout 部分,您可以使用如下的语句:
#include <iostream> using std::cout; int main () { cout << "std::endl is used with std!" << std::endl; return 0; }
3.不连续的命名空间
命名空间可以定义在几个不同的部分中,因此命名空间是由几个单独定义的部分组成的。一个命名空间的各个组成部分可以分散在多个文件中。
所以,如果命名空间中的某个组成部分需要请求定义在另一个文件中的名称,则仍然需要声明该名称。下面的命名空间定义可以是定义一个新的命名空间,也可以是为已有的命名空间增加新的元素:
namespace namespace_name { // 代码声明 }
4.嵌套的命名空间
在c++中,命名空间的使用是可以嵌套的。如下所示:
namespace namespace_name1 { // 代码声明 namespace namespace_name2 { // 代码声明 } }
注意,引用父级命名空间并不能直接调用子空间里的变量,如下:
#include<iostream> using namespace std; namespace first_space{ namespace second_space{ int a=0,b=1; } } using namespace first_space; int main(){ cout<<a<<" "<<b<<endl; //错误代码,a未定义 return 0; }
正确调用方式如下:
#include<iostream> using namespace std; namespace first_space{ namespace second_space{ int a=0,b=1; } } using namespace first_space::second_space; int main(){ cout<<a<<" "<<b<<endl; return 0; }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
gRPC基本使用(一)--java与go之间的相互调用
gRPC是一个高性能、开源、通用的RPC框架,面向移动和HTTP/2设计。gRPC 默认使用 protocol buffers,这是 Google 开源的一套成熟的结构数据序列化机制。 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 简介 本文只是根据gRPC相关资料文档编写的Java Spring Boot 与 Golang 语言相关调用的示例。 详细内容 编写proto文件 使用proto3语法。文件user_provider.proto。 需要使用proto文件,来自动生成不同语言的相关接口、类、对象等。 // user service provider // proto语法版本 syntax = "proto3"; // 可选参数 设置java package option java_package = "cn.lpe234.grpc.grpcdemo.grpc"; // 定义对外暴露的服务 ...
- 下一篇
深入分析Kubelet Bootstrap Checkpoint
Author: xidianwangtao@gmail.com , Version: Kubernetes 1.12 摘要:本文对Kubelet Bootstrap Checkpoint的使用方法、应用场景、工作机制及其代码工作流程进行了全面分析,目前仍处于Alpha阶段,不确定性较大,但值得持续的关注它在self-hosted kubernetes, kubeadm upgrade, bootkube等方向的应用,相信Kubernetes的部署和升级还会变的更加简单。 Kubelet Bootstrap Checkpoint是什么 Kubelet Bootstrap Checkpoint是kubelet对特定的Pods的进行备份、恢复的kubelet内置模块。 Kubelet Bootstrap Checkpoint是对当前Node上带有Annotation:node.kubernetes.io/bootstrap-checkpoint=true的Pods的Checkpoint到文件系统机制。 当kubelet重启时,会检查checkpoint目录下各个Pods对应的checkpoi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2全家桶,快速入门学习开发网站教程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- 2048小游戏-低调大师作品
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7