C++命名空间详细介绍

news2024/10/8 14:34:47

C++命名空间

    • 命名空间
      • A.What(什么是命名空间)
      • B.Why(为什么要使用命名空间)
      • C.Which(命名空间有哪些类型)
        • 全局命名空间
        • 嵌套命名空间
        • 内联命名空间
        • 匿名命名空间
      • D.内联命名空间
        • What
        • Why(内联命名空间的作用)
      • E.匿名命名空间(未命名的命名空间)
        • What
        • Why(匿名命名空间的作用)
      • F.命名空间的别名
      • G.using namespace std声明

命名空间

A.What(什么是命名空间)

用来避免命名冲突和组织代码的一种机制。它可以将全局作用域划分为不同的区域, 每个区域中可以定义相同名称的变量、函数、类等,而它们之间不会发生命名冲突

B.Why(为什么要使用命名空间)

避免冲突和组织代码

C.Which(命名空间有哪些类型)

全局命名空间

全局作用域:

所有类、函数及命名空间的作用域被称为全局作用域

全局命名空间:

全局作用域范围的空间,全局作用域中定义的成员名字被隐式地添
加到全局命名空间,访问全局命名空间的成员(::member_name)

嵌套命名空间

命名空间A中嵌套了命名空间B

namespace A
{
	namespace B
	{
		class Student{...}
	}
}

访问方式:

A::B::Student stuObj;
内联命名空间

被关键字inline修饰的命名空间,内联命名空间的成员可以直接被外层命名空间访问

namespace A
{
	inline namespace Animal_Namespace
	{
		string strPandas = "Pandas";
		string strDog = "Dog";
	}
	void display()
	{
		std::cout<<strPandas<<std::endl; //可以直接访问
	}
}
匿名命名空间

没有名字的命名空间

namespace
{
	double dHumanAveAge = 78.2;
}

D.内联命名空间

What

被关键字inline修饰的命名空间,内联命名空间的成员可以直接被外层命名空间访问

namespace A
{
	inline namespace Animal_Namespace
	{
		string strPandas = "Pandas";
		string strDog = "Dog";
	}
	void display()
	{
		std::cout<<strPandas<<std::endl; //可以直接访问
	}
}
Why(内联命名空间的作用)
  • 向后兼容:

    使用内联命名空间,可以在现有的命名空间中添加新的函数、类或变 量而无需修改原始代码。这样,在库的更新版本中,用户可以继续使用原始命名空 间,并享受到新功能的好处,而无需修改其它代码

  • 细粒度命名空间控制:

    内联命名空间允许将部分代码放入特定的命名空间中,从而实现更细粒度的命名空间控制,如下例子所示:

    namespace A
    {
    	inline namespace Spring
    	{
    		string strWhere = "Shengzhen";
    		long lYear = 1980;
    	}
    	inline namespace Winter
    	{
    		string strWhere = "Dongbei";
    		long lYear = 1998;
    	}
    	void display()
    	{
    		std::cout<<Spring::strWhere<<"..."<<Spring::lYear<<std::endl;
    		std::cout<<Winter::strWhere<<"..."<<Winter::lYear<<std::endl;
    	}
    }
    
  • 代码组织化和模块化:

    使用内联命名空间可以将相关的功能组织在一起,形成模块化的代码结构

  • 名称隐藏:

    内联命名空间中的标识符不会污染外部命名空间,这意味着可以在内联命名空间中定义与外部命名空间中相同名称的标识符,而不会导致冲突

E.匿名命名空间(未命名的命名空间)

What

没有名字的命名空间被称为匿名命名空间

namespace 
{
	double dHumanAveAge = 78.0;
}

注意:未命名的命名空间中的成员具有静态声明的周期,但它仅在本文件中有效,作用域不会跨文件存在

Why(匿名命名空间的作用)
  • 取代静态声明:未命名的命名空间中声明变量取代文件中的静态声明
  • 隐藏细节:匿名命名空间中的成员仅在本文件中可见,这样可以隐藏一些实现细节,防止其它文件直接访问和修改
  • 提供内部实现:匿名命名空间可以用来定义一些只在当前文件夹中使用的辅助函数、变量或类,可以将这些实体与其它文件的接口分离,提高代码的可维护性

F.命名空间的别名

namespace AnimalNamespace {...}
namespace AniSpace = AnimalNamespace; //接下来的程序就可以使用AniSpace替代AnimalNamespace

G.using namespace std声明

using std::cout;
cout<<"Hello world"<<std::endl;
using std::endl;
cout<<"Oh, My gold!"<<endl; //上述using代码将cout和endl注入到了当前作用域中

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

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

相关文章

动漫3d模型设计需要注意什么?---模大狮模型网

设计动漫3D模型时&#xff0c;有几个方面需要注意&#xff1a; 保持角色风格一致性&#xff1a; 动漫通常有独特的风格和美学&#xff0c;设计时要确保模型与所代表的角色或作品的整体风格相符。注意保持线条和比例的一致性&#xff0c;使模型能够忠实地呈现原作的特点。 注重…

论文降痕降重全攻略:从技巧到工具,助你轻松应对学术挑战

AIGC降重工具&#xff1a;快速降低论文查重率 高查重率是许多毕业生的困扰。通常&#xff0c;高查重率源于过度引用未经修改的参考资料和格式错误。传统的降重方法&#xff0c;如修改文本和增添原创内容&#xff0c;虽必要但耗时且成效不一。 鉴于此&#xff0c;应用AI工具进…

VMWare桥接模式上网

1. 前提条件: 1) 宿主机 可以上网 2)虚拟机网卡配置桥接模式 3)虚拟机设置ip和宿主机在同一网段,配置网关和宿主机一致 4)虚拟机网卡配置DNS 具体如下: 5)虚拟机和宿主机可以相互ping 通2. 记录问题解决步骤

@RequiredArgsConstructor实现构造器注入

RequiredArgsConstructor实现构造器注入 1. Autowired 和 Resource 注解 Autowired Autowired 是 Spring 框架提供的注解&#xff0c;用于自动装配依赖。可以用于字段、构造函数和 setter 方法。 Autowired private ISysUserService userService;Resource Resource 是 Jav…

Python-PLAXIS自动化建模技术与典型岩土工程

原文链接&#xff1a;Python-PLAXIS自动化建模技术与典型岩土工程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608744&idx3&sn41d9fd9ab6e792850000c4990b3f8c65&chksmfa82684fcdf5e15990e4681f032ce9b295a9e2071051218f550a7e63e4ebedee29559d56…

Linux下vim工具应用

1.简介 Vim&#xff08;Vi IMproved&#xff09;是一种高度可配置的文本编辑器&#xff0c;用于有效地创建和更改任何类型的文本。它是从vi发展而来&#xff0c;vi是Unix和类Unix系统上最初的文本编辑器之一。Vim被设计为程序员和文本编辑的爱好者使用&#xff0c;它以其强大的…

广度优先(BFS)

先看一道简单的题&#xff0c;迷宫问题&#xff1a; 洛谷P1746 离开中山路&#xff1a;P1746 离开中山路 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include<cstring> #include<queue> #include <utility> #define N 1002 …

Jenkins设置开机自启(以war包方式启动jenkins)

配置环境&#xff1a;Centos7.6/Jenkins 2.452.2/jdk-21.0.3 jenkins启动命令&#xff1a; nohup java -jar jenkins.war > /dev/null 2>&1 & 1、创建sh脚本文件 # jenkins.war包&#xff0c;放在了/root/software目录 cd /root/software vim jenkins-start.sh …

Matter Open Day:全球生态首秀,中国力量引领智能家居新纪元

▲ 会场全景 7月8日下午&#xff0c;广州南丰朗豪大酒店内人声鼎沸&#xff0c;由连接标准联盟和连接标准联盟‍中国成员组(CMGC)共同主办的首届 Matter Open Day 活动圆满落下帷幕。 此次盛会不仅标志着智能家居领域的一次重要聚首&#xff0c;更见证了连接标准联盟(原Zigbee…

用Python编写一个模拟usb摄像头的程序

昨天有个朋友找我要刷点政府的再就业的视频课&#xff0c;说是就是用浏览器打开固定的网站&#xff0c;然后用身份证号码登录&#xff0c;然后播放里面的视频&#xff0c;不定时的网页会通过usb摄像头拍照做人脸识别&#xff0c;就是这么一个简单的要求&#xff0c;叫我给想想办…

论文AI痕迹过重怎么办?AI降痕工具来帮忙

如何有效利用AI工具提高工作效率&#xff1f;探索这5款顶级AI写作工具 不知道大家有没有发现&#xff0c;随着人工智能技术的快速发展&#xff0c;AI工具正逐渐渗透到我们日常生活的各个方面&#xff0c;极大地提高了我们的工作和学习效率。无论是AI写作、AI绘画、AI思维导图&…

AI算力发展现状与趋势分析

综合算力发展现状与趋势分析 在数字经济的疾速推动下&#xff0c;综合算力作为驱动各类应用和服务的新型生产力&#xff0c;其价值日益凸显。我们深入探讨了综合算力的定义、重要性以及当前发展状况&#xff1b;并从算力形态、运力性能和存储技术等角度&#xff0c;预见了其发展…

C语言实战 | 弹跳的小球

C语言实战——实现弹跳的小球 01、综合案例 编写程序&#xff0c;实现小球(小方块)在屏幕内斜向运动&#xff0c;遇到边界发生反弹&#xff0c;如图2.6所示。 ■ 图2.6弹跳的小球 在例2.2中&#xff0c;通过变量drow、dcol控制方块的运动方向&#xff0c;例如斜向右下运动&am…

从实时监控到风险智能预警:EasyCVR视频AI智能监控技术在工业制造中的应用

随着科技的不断进步和工业制造领域的持续发展&#xff0c;传统的生产管理方式正逐渐转型&#xff0c;迈向更加智能、高效和安全的新阶段。在这个变革过程中&#xff0c;视频智能监控技术凭借其独特的优势&#xff0c;成为工业制造领域的管理新引擎&#xff0c;推动着从“制造”…

真实测评网上较火的两款智能生成PPT产品:秒出PPTAI PPT

测评两款AI生成PPT的工具&#xff1a;秒出PPT和AI PPT。这俩个款是目前竞争比较激烈的且使用起来比较好的产品。一下主要从PPT模板、一键生成及生成效果、Word转PPT来分析一下使用感受。 秒出PPT 秒出PPT是集模板站与编辑站一体的产品&#xff0c;支持微信扫码登录。主页可以直…

Leetcode—236. 二叉树的最近公共祖先【中等】

2024每日刷题&#xff08;142&#xff09; Leetcode—236. 二叉树的最近公共祖先 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode(int x) : val(x), left(NULL), right(NULL…

realsense D435l+mid360标定

目录 一、安装realsense环境 二、获取realsense D450L相机内参 三、标定雷达和相机 1.下载livox_camera_calib 2.修改配置参数 3.使用fastlio生成点云 4.标定 一、安装realsense环境 git clone https://github.com/IntelRealSense/librealsense.git cd librealsense //更…

JAVASE进阶day07(泛型,集合,Set,TreeSet,枚举,数据结构)

泛型 1.泛型的基本使用 限制集合存储的数据类型 package com.lu.day07.generics;/*** 定义了一个泛型类* E 泛型通配字母(不固定代替真实数据类型A-Z都可以)* 常见的泛型通配字母:* E:element 元素* T:type 类型* R:return 返回值类型* K:key 键* …

Blender 中导出模型fbx

准备模型&#xff1a;确保你的模型已经完成&#xff0c;并且所有的材质、纹理等都已设置好。 应用所有变换&#xff1a; 选择模型&#xff0c;按下 CtrlA&#xff0c;选择 "All Transforms" 以应用所有的变换&#xff08;位置、旋转和缩放&#xff09;。 导出模型&a…

sql常用语句:

1.联合查询 对表中的数据进行限制&#xff1b; 2.从一个表复制到另一个表 SELECT INTO 将数据复制到一个新表&#xff08;有的 DBMS 可以覆盖已经存在的表&#xff0c;这依赖于 所使用的具体 DBMS&#xff09; SELECT *&#xff08;字段&#xff09; INTO CustCopy FROM Cu…