C++匿名名字空间

[C++] 匿名命名空间 匿名命名空间是C++中的一种特性,它允许你在不指定名称的情况下声明一个命名空间。这种命名空间主要用于局部作用域,例如在一个源文件的顶层,来限制符号的作用范围,从而避免全局命名空间中的命名冲突。匿名命名空间中的所有声明都自动成为该源文件的局部命名空间的一部分。这意味着,即使没有显式使用命名空间前缀,也无法从其他源文件访问匿名命名空间内的成员。因此,匿名命名空间非常适合用来隐藏那些仅限于当前源文件使用的函数、变量和类型。 阅读详情

转载自:http://hi.baidu.com/thinapple/blog/item/049df24f6d30bc3eaec3aba7.html

名字空间(namespace),是C++提供的一个解决符合名字冲突的特性。标准规定,在不同名字空间中命名相同的符号,代表不同的实体。通常,利用定义名字空间的办法,可以使模块划分更加方便,减少模块间的相互影响。
通常定义一个名为MyNameSpace的名字空间,其形式为:

1namespace MyNameSpace
2{
3}

如果不写MyNameSpace,在C++里也是允许的,这就是匿名名字空间。按照标准的描述,匿名名字空间等价于:

1namespace unique
2{
3}
4usingnamespace unique;

这里的unique由编译器决定,并保证这是一个在程序里唯一的名字空间。

因此,可以看出,匿名名字空间具有一个很有用的特性,那就是,对于不同的编译单元(cpp文件),“同一个”匿名名字空间中的对象,会被当作不同的实体。而这个特性和全局的static修饰是一致的。那这能带来什么好处呢?原有的static不是很好用的吗?

是的,static修饰,在处理函数和变量(包括常量)的时候已经工作得很好了。但是static的缺陷是不能修饰class和struct这样的结构定义。因此,当出现这种情况: 在某个cpp实现里需要辅助的几个结构a,b,c来帮助实现,但是又不希望这些结构污染整个名字空间。这时一般有如下两种解决办法:

1)定义一个不常用的名字空间,将a, b, c 放入其中。
这样,需要程序员自己保证名字空间的名字唯一。
2)使用类内部结构体定义。
这样,如果结构比较复杂,比如,有静态成员,就行不通了。而且如果这些结构不是一个类独自使用而需要几个类共享,处理起来也比较麻烦。

这时,如果使用匿名名字空间,就可以比较完美解决问题了。

【总结】: 匿名名字空间提供了类似在全局函数前加 static 修饰带来的限制作用域的功能。它的这种特性可以被用在struct和class上, 而普通的static却不能。

零基础小白Coze知识普及【新手必备资料!!】 AI智能体|扣子(Coze)工作流搭建【零基础小白Coze知识普及】 1、领取100+工作流源码!复制到扣子即可直接使用 2、AI认知+9节商业智能体拆解 3、500+各行业高质量提示词 4、超低价格使用即梦文生图图生视频和banana生图 阅读详情

相关推荐

同源策略与跨域

前言:最近业务上前端同学多次联系说访问腾讯云cos资源的时候因为跨域的问题访问不到。大致看了下腾讯云关于设置跨域访问的教程,按照前端同学给的域名等选项就给配了,而且测试下来也是好的。但是呢一直不知道什么是跨域这里就做一个简单的学习记录。 一、同源策略 同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也是最基本的安全功能。同源策略会阻止一个域的javascrip脚本和另一个域的内容进行交互,是用于隔离潜在恶意文件的关键安全机制;关于这一点我们后面会举例说明。...

mijichui2153的博客 1万+

c++系列:匿名命名空间

文章目录1.什么是匿名命名空间?2.匿名命名空间有什么用处?3.实验3.1在匿名空间中引用其它命名空间3.2匿名命名空间中引用自己命名空间中的方法3.3其他命名空间中引用匿名命名空间中的方法3.4不同文件调用匿名命名空间4.最后 1.什么是匿名命名空间? 匿名命名空间就是一个没有名字的命名空间。 namespace { func() { ... } } 2.匿名命名空间有什么用处? 匿名命名空间里的内容只能被本文件调用,不能被外部引用; 匿名命名空间中的变量特点跟全局变量一样,而函数特点像是

weixin_38956024的博客 9141

大麦APP抢票协议分析:从‘掌密网络’代码看移动端API安全防护

本文深度解析了大麦APP抢票协议的安全防护体系,重点分析了'掌密网络'代码中体现的动态签名、设备指纹和人机验证等关键技术。文章详细介绍了大麦APP如何通过多层次API安全防护应对抢票压力,包括参数加密、请求头部设计和异常处理机制,为移动应用开发者提供了安全实践建议。

weixin_28740299的博客 289

C++匿名命名空间

1. std和cout的引入 (1)std是C++标准库定义好的一个namespace C++为了保证程序员定义的函数不与标准库中的函数不冲突,用了命名空间这种机制;C语言是不能保证C的标准库中的函数名与程序员自己定义的函数名不冲突,C语言中完全是靠程序员自己注意来避免与C标准库中的函数不冲突。 (2)cout是std这个namespace下的一个标准输出工具(实际是一个对...

taotongning的博客 1796

计算机补码两位乘法移位补0还是1,补码两位乘.doc

补码两位乘沈阳航空航天大学课 程 设 计 报 告课程设计名称:计算机组成原理课程设计课程设计题目:COP2000实现补码两位乘法院(系):计算机学院专 业:计算机科学与技术(嵌入式系统方向)班 级学 号:2009040101181姓 名:张驰指导教师:杨华完成日期:2012年1月14日目 录第1章 总体设计方案11.1设计原理11.2设计思路11.3设计环境2第2章...

weixin_34471838的博客 967

【Tessy】集成测试小白入门指导

本文详细介绍了如何进行集成测试的小白入门指导,从新建工程到设计用例,实现集成测试的过程详细步骤

qq_37282365的博客 1184

C++无名命名空间namespace(匿名命名空间)和全局静态变量

也就是说,即使您在代码中写了两个看起来独立的匿名命名空间块,编译器也会将它们视为同一个命名空间的连续部分。在C++引入无名命名空间后,在文件中使用无名命名空间来定义变量和函数,也能起到与静态声明一样的效果,而且不需要每个变量和函数单独加static进行声明。2. 在C++中,当你使用无名命名空间(也称为匿名命名空间)时,其中的所有变量和函数默认具有内部链接性(internal linkage),这意味着它们只在定义它们的翻译单元(translation unit,通常是单个源文件)中可见。

BaiiaJava的博客 1989

7.91版本unidbg调用方式

【代码】xhs最新7.91版本unidbg调用方式。

Codeooo 博客 1107

为什么要用C++之:命名空间

1.1.1. 为什么要命名空间(namespace) 对于一个大型的C语言软件项目,给函数和全局变量起名不是一个容易的事情,因为必须考虑有没有可能与其它程序员写的代码冲突,多数的做法是对每个模块的一组函数名加个特定前缀,如HTRequest_setInternal、HTRequest_internal等。这使得程序员每次调用这些函数时都必须多输出一些字符,虽然使用现在比较优秀的IDE(Integrated Development Environment),不会给程序员的输入带来多少负责,但这些字符看起来还

人生如旅 3839

【DRAM存储器四十七】LPDDR5介绍--LPDDR5的低功耗技术之DVFS

讲述LPDDR5的DVFSC和DVFSQ的工作原理和要求

highman110的博客 899

U盘无法识别?一条命令轻松修复,数据不丢失

问题描述 U盘经常会遇到提示:无法识别或者需要重新格式等问题,例如下图 修复方法 WIN+R输入cmd 输入chkdsk+盘符:/F /F是修复的意思 更多内容 U盘无法识别或提示需要格式化?别急着格式化丢失数据!本文教你使用Windows自带的命令快速修复U盘文件系统错误,简单几步就能解决问题,让你的U盘恢复正常使用💾✨

XiaoqiangClub的博客 637

c++ 嵌套名字空间和匿名名字空间

嵌套名字空间用于代码的模块化组织,支持逻辑分层(如),C++17 简化语法提升可读性。匿名名字空间实现翻译单元内部的私有逻辑,避免全局命名污染,比static更符合 C++ 规范。合理使用嵌套名字空间和匿名名字空间,可以显著提升代码的可维护性和封装性。

曾经也曾立志 637

基于STM32设计的便携式心电信号监测系统_474

本课题设计并实现了一种基于STM32单片机的便携式心电信号监测系统。系统以STM32F103C8T6为核心控制单元,结合PulseSensor心率传感器,实现对人体心率信号的采集与处理。通过单片机内部ADC模块对传感器输出的模拟电压信号进行采样,并对采集数据进行分析处理,从而计算得到实时心率值。

159

【C++】匿名名字空间与内部连接

(点击上方公众号,可快速关注)连接性(linkage)控制某个名字(可以是变量、函数、类等)在多个编译单元的共享,其在C++标准中的描述是异常复杂的。总体上,一个名字的连接性可以是以下三...

434

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++ 匿名名字空间及静态非成员函数

在C++中,static有一个感觉被较少提及的用法:修饰非成员函数,这个用法实际是从C语言继承来的。其作用是表明这个函数只在当前编译单元中有效。这就使这个函数的所有引用在编译时就可以全部确定,无需进入链接阶段,链接器没有机会看到这个函数相关的一切符号,无论导入还是导出(理论上,实际编译器如何处理这个事情可能不尽相同,未作深入研究)。即使多个编译单元都包含相同的signature相同名字的函数,链接

Bad Alloc 1257

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++基础与深度解析 | 异常处理 | 枚举与联合 | 嵌套类与局部类 | 嵌套名字空间与匿名名字空间 | 位域与volatile关键字

如果异常是在对象的构造过程中抛出的,并且没有被捕获,那么类的析构函数不会被调用。引入了结构化的错误处理机制,使得错误处理逻辑与正常逻辑分离,提高了代码的可读性和可维护性。关键字用于抛出一个异常。),在构造函数中抛出异常且未被捕获时,需要手动释放分配的内存,因为析构函数不会被调用。如果对象是局部的(即在栈上),异常抛出时,局部对象会自动销毁,但不会调用其析构函数。如果在构造函数中抛出异常,已经构造的成员对象将按照它们构造的相反顺序自动销毁。是一个通用的异常捕获器,它可以捕获任何类型的异常,包括未被前面的。

zwcslj的博客 1402

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

c++学习-匿名名字空间用法

用法下午在学习levedb源码的时候,看到version_set.cc有这样一段代码:// Callback from TableCache::Get() namespace { enum SaverState { kNotFound, kFound, kDeleted, kCorrupt, }; struct Saver { SaverState state; const

Kang_TJU的博客 1352

C++ 学习之匿名名字空间的使用细节

匿名命名空间(anonymous namespace)是C++中的一种特殊命名空间,它没有显式的名称。匿名命名空间可以用来定义仅在当前文件中可见的全局变量、函数和类。由于没有名字,所以相当于直接引入,但是没有引入定义。如果发生冲突,则匿名空间中变量不起作用。

wniuniu_的博客 585

c++的名字空间

在C语言中定义的全局变量、函数、结构、联合、枚举、枚举值、宏都在全局作用域下,所以当项目比较庞大时,非常容易造成命名冲突(以模块名作前缀、后缀),所以C++中选择把全局作用域进行拆分成子作用域进行管理,这些子作用域就是作名字空间。

zzt_is_me的博客 1010

匿名名字空间

 名字空间(namespace),是C++提供的一个解决符合名字冲突的特性。标准规定,在不同名字空间中命名相同的符号,代表不同的实体。通常,利用定义名字空间的办法,可以使模块划分更加方便,减少模块间的相互影响。通常定义一个名为MyNameSpace的名字空间,其形式为:        1 namespace MyNameSpace    2 {    3 } static修饰,在处理函

1911

c++名字空间

文章目录名字空间定义名字空间可以重名名字空间可以嵌套名字空间的使用 c++常用于做一些大型项目,这其中会有不同公司的开发人员参与编写,有时还会借助一些第三方库,其中难免会出现标识符命名冲突,为避免这种冲突的出现。 c++的设计者设计了名字空间来避免这种冲突,将自己的命名空间使用**namespace xxx{}**包含起来,形成自己的作用域,这样就不会和别人的发生名字冲突。那么名字空间是怎样保证不...

博客小站 481

匿名命名空间和 static 声明的区别

在C语言中,如果我们想要一个符号只在文件内部(严格来说是编译单元内部,也就是经 过预处理之后得到的源文件)可用,我们需要把它声明成static在C++之所以推荐在C++使用匿名名字空间来取代staticstatic的这个关键词的用途过多,比如你还可以用它声明静态成员,用它声明函数内 部的静态变量。static3. 某些模板的参数必须具有外部链接熟悉,比如下面的代码是不合法的虽然static关键字和匿名命名空间完成了类似是事情,但是这两者之间到底有什么本质 的区别呢?这篇文章的剩余部分会详细说明这个问题。

chenyuping333的博客 713

C++名字空间

     名字空间:  名字空间如果不写名称的话称为匿名名字空间。 它提供了C语言类似在全局变量前面加上static关键字来限制作用域的功能。(即这个变量只可以在本文件中)。不怕重名。        有什么问题欢迎留言!~~~~...

博客之家 1070

如何使用C++的名字空间(namespace)

名字空间 1、为什么需要名字空间 ​ 在项目中函数名、全局变量、结构、联合、枚举、宏等,非常有可能有命名冲突,而C++之父设计名字空间就是为了解决这些命名冲突,名字空间可以把这些命名划分到不同的逻辑空间中,从而解决命名冲突。 2、定义名字空间 namespace name { 定义变量 定义函数 定义类、结构、联合、枚举 } ​ 注意:名字空间可以重复,同名的名字空间会自动合并 #include <iostream> namespace n1 { int num = 10

weixin_51420051的博客 512

c++ 名字空间 namespace

定义 namespace 名字空间的名字{ 全局变量 类型定义 函数 } 意义 对于一个较大型的C++程序来说,需要由多个程序员相互协作编写,这样的情况下容易出现不同程序员在需要负责的程序部分使用相同名字的变量或函数,导致程序合并后出现问题。名字空间的作用,就是将不同程序员编译的程序放入相应的名字空间,每个名字空间相对独立,空间内的变量和函数名只局限于当前空间下,从而解决命名冲突的问题。 名字空间的三种使用方法 (1)作用域限定符 名字空间名::标识符 表示明确访问是特定名字空间中的特定标识符 最

weixin_53272394的博客 616

名字空间--C++

名字空间又叫命名空间。命名空间(Namespace)是一种封装标识符(如变量名、函数名、类名等)的方法,用于避免命名冲突。通过命名空间,你可以将相关的代码组织在一起,使得代码更加模块化、清晰和易于维护。

2302_76582185的博客 528
上一篇: C++枚举类型同名冲突问题
下一篇: vs2010静态库 动态库
eric_arrow
博客等级 码龄14年 65粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值