【C++初阶】命名空间 namespace

news2024/11/15 17:23:14


一.前言

在正式进入C++前,我们需要先了解了解C++。顾名思义,C++是基于C的一种编程语言,相较于C,C++写出来的代码更简洁,有时候C需要几百行代码,而C只需要几十行就可以解决,C++也很好的解决了C中存在的一些问题,例如:命名冲突。

C++的命名空间就能很好的解决这个问题。


二.命名冲突

在C语言中,我们定义的变量不能是库里有的,例如 int  printf  就不能这么定义,因为printf是库的函数,这样定义变量就会命名冲突

上图就很好的展示了这个错误。那库那么多,我们怎么保证当我们新加了一个头文件时,不会形成命名冲突呢?万一这个命名冲突又很多该怎么办?要全部改掉吗?

完全不需要,C++的命名空间可以完美解决这个问题。

三.命名空间  namespace

A.命名空间的定义

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

例:

namespace  Eve   //命名空间的名字
{
    //命名空间的成员
    int a=10;
    int b=20;
    char d='a';
}     //注意这里没有分号

命名空间的成员可以是变量,函数,类型等;

命名空间可以嵌套定义

同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中;
ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个。

B.命名空间的使用

1.使用命名空间的目的

使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染

2.域

域分为:

1.类域

2.命名空间域

3.全局域

4.局部域

它们的访问顺序一般是:局部域->全局域->展开的命名空间域  or  指定访问的命名空间域

3.命名空间的三种使用方式

a.加命名空间名称及作用域限定符  (::)

作用域限定符:“::”(即两个冒号);

使用格式:命名空间的名字::成员名

注:若::前是空白,则访问的是全局的成员

例:

namespace Eve
{
    int a=10;
    char b='a';
}

int main()
{
    printf("%d  %c\n",Eve::a,Eve::b);   //访问命名空间内的成员
    
    return 0;
}

b.使用using将命名空间中某个成员引入

using可以理解为展开,展开后的命名空间或是命名空间中的成员将暴露在全局域下

例:

namespace Eve
{
    int a=10;
    int b=20;
}

using  Eve::a;  //展开命名空间中的成员a,注意后面有分号

int main()
{
    printf("%d\n",a);  //因为a已经展开了,所以可以直接使用

    return 0;
}

c.使用using namespace 命名空间名称 引入

例:

namespace Eve
{
    int a=10;
    int b=20;
}

using  namespace Eve;  //展开整个命名空间,注意后面有分号

int main()
{
    printf("%d\n",a);  //因为a已经展开了,所以可以直接使用

    return 0;
}

访问嵌套的命名空间的成员时:

C.例子总结

int a = 0;

namespace Eve
{
	int a = 1;
	
}

//using namespace Eve;

int main()
{
	int a = 2;

	printf("%d\n", a);
	printf("%d\n", ::a);
	printf("%d\n", Eve::a);

	return 0;
}

打印结果是什么呢?

如图所示:第一个printf 访问的是局部变量

                  第二个printf 访问的是全局变量

                  第三个printf 访问的是命名空间Eve里的a


三.一些小技巧

using  namespace  std;

上面这句代码是展开标准库(展开前要包含头文件<iostream>),但不能随意展开,有一定的风险,平常练习可以用用,做项目时建议不要展开。

还有一些我们常用的可以展开,比如cout,cin,endl等,这样更便捷。


🐬🤖本篇文章到此就结束了,这是博主的第一篇关于C++的文章,以后也会不断更新的,             若有错误或是建议的话,欢迎小伙伴们指出;🕊️👻

😄😆希望小伙伴们能支持支持博主啊,你们的支持对我很重要哦;🥰🤩

😍😁谢谢你的阅读。😸😼

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【夜莺监控搭建】

夜莺监控搭建V6版本 v6版本系统架构安装部署安装时序数据库安装mysql、redis和n9e&#xff08;夜莺主程序&#xff09;安装categraf 登录平台如何修改密码添加数据源 官网&#xff1a; https://flashcat.cloud/ GitHub项目地址&#xff1a; https://github.com/ccfos/nightin…

Mongo集群化部署+高可用架构

数据库开发系列 文章目录 数据库开发系列前言一、MongoDB存储引擎二、MongoDB 复制&#xff08;副本集&#xff09;三、为什么需要分片集群架构四、高可用分片集群架构&#xff08;复制集&#xff09;总结 前言 数据库的演进 随着计算机的发展&#xff0c;越来越多的数据需要被…

python+vue 服装穿搭信息管理系统

本系统采用自上往下的方法开发&#xff0c;基本定位如下功能&#xff1a; 本课题要求实现一套服装信息管理系统的设计与实现&#xff0c;系统主要包括管理员模块和用户模块功能模块。 由于本系统需要在不同设备上都能运行&#xff0c;而且电脑配置要求也要越低越好&#xff0c…

SpringMVC框架详解(学习总结)

目录 什么是MVC SpringMVC概述 SpringMVC常见开发方式 SpringMVC执行流程 SpringMVC核心组件介绍 快速构建Spring MVC程序 SpringMVC参数绑定 SpringMVC跳转方式 SpringMVC处理json请求和响应 SpringMVC静态资源处理 SpringMVC操作session和cookie SpringMVC拦截器 …

基于nuxt3的语雀文档批量导出

语雀文档批量导出 快速访问 Github Blog 项目由来 语雀是一个不错的笔记与文档知识库&#xff0c;但是最近发现他开始割韭菜了&#xff0c; 知识库的公开开始收费&#xff0c;就想着把内容都导出自己来部署&#xff0c;发现并没有批量操作&#xff0c;amazing&#xff0c;…

美国运营商PTCRB认证PTCRB认证怎么做PTCRB认证是什么?

大家好&#xff0c;今天我想和大家分享一下什么是PTCRB认证&#xff01; PTCRB是指个人通信服务型号认证评估委员会&#xff0c;由北美移动运营商于1997年成立。目前的运营商已经不仅限于北美&#xff0c;而是涵括全球范围内的移动运营商成员。其目的是为包括Cellular GERAN&a…

Session使用和原理分析图与实现原理-- 代码演示说明 Session 的生命周期和读取的机制代码分析

目录 Web 开发会话技术 -Session —session 技术 session 基本原理 Session 可以做什么 如何理解 Session Session 的基本使用 session 底层实现机制 原理分析图 代码演示 CreateSession.java 测试 Session 创的机制&#xff0c; 注意抓包分析​编辑 ReadSession.j…

C盘文件删除怎么做?3个方法教你清理C盘!

案例&#xff1a;C盘文件怎么删除&#xff1f; 【我的电脑使用了一年多了&#xff0c;现在C盘已经快满了&#xff0c;想知道C盘里的文件哪些可以进行删除&#xff1f;感谢&#xff01;】 C盘是计算机系统盘&#xff0c;存储了操作系统和应用程序等重要文件&#xff0c;因此&a…

机器视觉助力锂电行业升级转型—章鱼博士视控一体化解决方案

摘要&#xff1a; 机器视觉在工业领域中充当了模拟人眼的作用&#xff0c;通过其高效的感知能力、精确的检测准确性、可定制性和较低的人工成本等特点&#xff0c;已逐渐成为工业智能化转型的核心功能。在锂电池领域&#xff0c;机器视觉扮演着许多重要的角色&#xff0c;包括生…

使用Docker部署wikitten个人知识库

使用Docker部署wikitten个人知识库 一、wikitten介绍1.wikitten简介2.wikitten特点 二、本地实践环境介绍三、本地环境检查1.检查Docker服务状态2.检查Docker版本 四、部署wikitten个人知识库1.创建数据目录2.下载wikitten镜像3.创建wikitten容器4.查看wikitten容器状态5.检查w…

【unity实战】随机地下城生成4——小地图的制作(2d,3d通用)(含源码)

原理: 新建一个摄像机,用来查看小地图,我们分个图层只能新建的摄像机才可以拍摄到 如果对摄像机和渲染纹理还不理解的,强烈推荐先看完我的另一篇文章 【Unity游戏开发教程】零基础带你从小白到超神14——灯光、摄像机、天空盒、镜子的制作 新建一个摄像机,记得删除Audio …

关于使用el-input-number设置不让删除为空,让强制为最小值1,以及从1删除,但是发现输入框还是没有最小值的问题

哈喽&#xff0c;大家好啊&#xff0c;最近用到了element的el-input-number 计数器 但是有个问题一直困扰我&#xff0c;就是我发现竟然可以删除输入的值&#xff0c;也不会强制改成最小值 但是因为业务这里不允许数量为空的情况&#xff0c;所以我找了很久&#xff0c;终于实…

JavaSE学习进阶day07_01 Stream流

第二章 Stream流 在Java 8中&#xff0c;得益于Lambda所带来的函数式编程&#xff0c;引入了一个全新的Stream概念&#xff0c;用于解决已有集合类库既有的弊端。 2.1 引言 传统集合的多步遍历代码 几乎所有的集合&#xff08;如Collection接口或Map接口等&#xff09;都支…

SpringBoot学习

什么是springBoot 使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。简而言之&#xff0c;Spring Boot通过提供默认配置的方式整合了所有的框架&#xff0c;让我们可以更加简单、快速、方便地构建应用程序。 并不是对spring的功能增强&#xf…

基于AT89C52单片机的温湿度检测设计

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87704704 源码获取 主要内容&#xff1a; 设计一套基于51单片机的温湿度Protus仿真监控系统&#xff0c;采用SHT11、DHT11或DS189B20等传感器模块&#xff0c;用LC…

【分享】集简云 x 微步在线丨零代码连接钉钉宜搭与用友U8,让企业数字化升级更轻松

微步在线 • 介绍 微步成立于2015年&#xff0c;是数字时代网络安全技术创新型企业&#xff0c;专注于精准、高效、智能的网络威胁发现和响应&#xff0c;开创并引领中国威胁情报行业的发展&#xff0c;提供“云流量端点”全方位威胁发现和响应产品及服务&#xff0c;帮助客户…

第八章 网络安全基础

网络安全概述 基本概念 网络安全通信的基本属性&#xff1a; 机密性&#xff1b;只有发送方与预定接收方能够理解报文内容消息完整性&#xff1b;发送方和接收方希望确保信息未被篡改&#xff0c;或发生篡改一定会被检测到可访问性与可用性&#xff1b;可访问与可用性是网络信…

mybatis02-核心配置文件、返回主键值、SQL片段、事务处理、动态SQL

Mybatis02 一、mybatis核心配置文件 在主配置config.xml中,定义了很多标签&#xff0c;现在只是使用了一部分标签&#xff0c;主配置文件中可以出现的标签 用dtd文 件进行约束。 1、标签的配置规范&#xff0c;查看dtd规范文件 <?xml version"1.0" encoding&…

centos7.6部署ELK集群(二)之kibana7.7.0集群部署

32.4. 部署kibana7.7.0&#xff08;在主节点上操作&#xff09; 32.3.13. 下载kibana curl -L -O https://artifacts.elastic.co/downloads/kibana/kibana-7.7.0-linux-x86_64.tar.gz 32.3.14. 解压至安装目录 tar –xvf kibana-7.7.0-linux-x86_64.tar.gz -C /vmdata/ 32.…

【极简】windows下,vuejs打包,用Nginx部署http服务

做法 如果你熟悉vue&#xff0c;一般要“运行”会在目录用npm run dev&#xff0c;但是npm run dev 命令只用做本地调试&#xff0c;共开发者预览页面。 同部署到服务器供其他终端访问是不同的&#xff0c;如果要提供给其他浏览器或终端使用&#xff0c;则需要部署到具体的服…