C++:命名空间

    从今天正式开始对C++的学习,这里只学习C++对C的拓展,和C相同的部分在C语言专栏中都可以找到,我们先看一段C++代码

#include<iostream>
using namespace std;
int main()
{cout<<"hello world<<endl;return 0;
}

     同样也是打印hello world,头文件还有main函数之前的using namespace std什么意思,cout又是什么意思,都需要我们进行了解

1.命名空间基础

     当一个项目很大时,它可能会包含大量重复的名字,C++可以对名字的产生和其所在作用域进行控制,在之前C语言的学习我们可以通过static关键字来使得名字只能在本编译单元内可见,在C++中我们可以通过命名空间来控制对名字的访问

     在C++中,名称可以是符号常量、变量、宏、函数、结构体、枚举等等

     std是C++标准命名空间,C++标准程序库中的所有标识符都被定义在std命名空间中,比如类iostream、vector等,使用时要加上using声明(using namespace std)或using指示(如std::cout)。

     可以定义不同的命名空间,这样即使名字相同也不会出现错误,类似这样:

      那我们如何定义命名空间呢,下面就是了

 2.命名空间的使用

2.1 命名空间的定义

namespace 名称
{//定义变量、函数、类型等等}

2.2 命名空间成员的访问

   (1)使用作用域操作符 ::

   (2)空间名::成员

#include<iostream>
using namespace std;namespace nameA  //定义一个名字是nameA的空间
{int a;void func(){cout<<"nameA"<<endl;}
}namespace nameB   //定义一个名字是nameB的空间
{int a;void func(){cout<<"nameB"<<endl;}
}int main()
{//访问空间中的成员变量nameA::a=100;nameB::a=200;cout<<"A::a:"<<nameA::a<<endl;//cout就类似printf,用来输出内容,endl的作用就相当于\ncout<<"B::a:"<<nameB::a<<endl;//访问空间中的成员函数nameA::func();nameB::func();return 0;
}

        由此可见,在不同的命名空间中定义相同名字的变量或者函数都是没有问题的,两个空间相互独立,谁也不会影响谁,这就是C++的优势! 

2.3 命名空间的错误使用

      命名空间不能在某个函数内定义,比如这样:

void test()
{namespace A{int a=10;}namespace B{int a=10;}cout<<A::a<<endl;cout<<B::a<<endl;
}

     命名空间只能在全局范围内定义,否则你函数调用结束了,空间也没了,等于没定义,费这么大劲干嘛,只能在全局范围内定义!

2.4 命名空间的嵌套使用

namespace A
{int a=10;namespace B{int a=10;}
}
void test()
{cout<<A::a<<endl;cout<<A::B::a<<endl;
}

2.5 命名空间的别名

     如果命名空间的名字很长记不住怎么办,我们有办法,起个别名,代码如下:

namespace veryLongname
{int a=10;void func(){cout<<"hello world"<<endl;}void test()
{namespace shortname=veryLongname;//起别名cout<<"veryLongname::a:"<<shortname::a<<endl;veryLongname::func();shortname::func();
}

     可以看到,两个名字的效果是一样的,神奇不神奇?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/278441.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装鸿蒙开发者工具DevEco Studio

1.进入官网下载工具 https://developer.harmonyos.com/cn/develop/deveco-studio/ 选择您电脑对应的系统下载即可 2.安装 很简单直接点击“next”,此处不做赘述 3.配置环境 安装完成后&#xff0c;打开DevEco Studio 会提示配置环境。安装node.js和ohpm 如果不小心关了&a…

【Docker】ES、Kibana及IK安装配置

目录 一.单节点安装部署 1.版本选择 2.推荐及总结 ​3.官网下载地址 4.创建网络 5.拉取镜像 6.创建文件夹 7.运行docker命令 二、安装kibana 1.安装kibana 2.浏览器访问 3.国际化 三、Elasticsearch查询 1.数据插入&#xff1a;POST或PUT 2.数据查询GET 3.分词…

动态面板简介以及ERP原型图案列

动态面板简介以及ERP原型图案列 1.Axure动态面板简介2.使用Axure制作ERP登录界面3.使用Asure完成左侧菜单栏4.使用Axuer完成公告栏5.使用Axuer完成左边侧边栏 1.Axure动态面板简介 在Axure RP中&#xff0c;动态面板是一种强大的交互设计工具&#xff0c;它允许你创建可交互的…

【Spring教程29】Spring框架实战:从零开始学习SpringMVC 之 服务器响应知识全面详解

目录 1 环境准备2 响应页面3 返回文本数据4 响应JSON数据5 知识点总结 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配…

浅析AI视频分析与视频管理系统EasyCVR平台及场景应用

人工智能的战略重要性导致对视频智能分析的需求不断增加。鉴于人工智能视觉技术的巨大潜力&#xff0c;人们的注意力正在从传统的视频监控转移到计算机视觉的监控过程自动化。 1、什么是视频分析&#xff1f; 视频分析或视频识别技术&#xff0c;是指从视频片段中提取有用信息…

Pytorch从零开始实战13

Pytorch从零开始实战——ResNet与DenseNet探索 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——ResNet与DenseNet探索环境准备数据集模型选择开始训练可视化总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;P…

Excel中MATCH和INDEX函数的用法详解,以及Vlookup的数组用法

match函数 目的&#xff1a;查询函数&#xff0c;范围单元格中搜索特定的项&#xff0c;然后返回该项在此区域中的相对位置。 For example:让 match 去【隔壁办公室】找【老张】 Match 回复&#xff1a;【老张】坐在【隔壁办公室】第【四】个座位上 公式&#xff1a;【 mat…

Redis 的常见使用场景

01 缓存 作为 Key-Value 形态的内存数据库&#xff0c;Redis 最先会被想到的应用场景便是作为数据缓存。而使用 Redis 缓存数据非常简单&#xff0c;只需要通过 string 类型将序列化后的对象存起来即可&#xff0c;不过也有一些需要注意的地方&#xff1a; 必须保证不同对象的…

服务器数据恢复-EqualLogic PS存储硬盘坏道导致存储不可用的数据恢复案例

服务器数据恢复环境&#xff1a; 一台DELL EqualLogic PS系列存储&#xff0c;存储中有一组由16块SAS硬盘组成的RAID5。上层是VMFS文件系统&#xff0c;存放虚拟机文件。存储上层分了4个卷。 服务器故障&检测&#xff1a; 存储上有2个硬盘指示灯显示黄色&#xff0c;磁盘出…

微服务架构之争:Quarkus VS Spring Boot

在容器时代&#xff08;“Docker时代”&#xff09;&#xff0c;无论如何&#xff0c;Java仍然活着。Java在性能方面一直很有名&#xff0c;主要是因为代码和真实机器之间的抽象层&#xff0c;多平台的成本&#xff08;一次编写&#xff0c;随处运行——还记得吗&#xff1f;&a…

【MySQL学习之基础篇】约束

文章目录 1. 概述2. 基础约束3. 外键约束3.1. 介绍3.2. 外键的添加3.3. 外键删除和更新行为 1. 概述 概念&#xff1a; 约束是作用于表中字段上的规则&#xff0c;用于限制存储在表中的数据。     目的&#xff1a; 保证数据库中数据的正确、有效性和完整性。 分类&#x…

路由器原理

目录 一.路由器 1.路由器的转发原理 2.路由器的工作原理 二.路由表 1.路由表的形成 2.路由表表头含义 直连&#xff1a; 非直连&#xff1a; 静态 静态路由的配置 负载均衡&#xff08;浮动路由&#xff09; 默认路由 动态 三.交换与路由对比 一.路由器 1.路由器…