c++ anonymous namespace -- 匿名空间

匿名空间,匿名类,匿名联合体,匿名结构体。
 
匿名空间
 
  1. #include <stdio.h>
  2. namespace A {
  3. int ID = 1;
  4. }
  5. namespace {
  6. int ID = 11;
  7. }
  8. namespace B {
  9. int ID = 21;
  10. }
  11. int main(void){
  12. printf("ID %d \n",ID);
  13. }
输出
  1. ID 11
这里用到是C的函数,减少std空间的干扰。这里输出的是匿名空间的内容。
那么就类似于如下用法
  1. namespace __UNIQUE_NAME_ {
  2. int ID;
  3. }
  4. using namespace __UNIQUE_NAME_;
如果修改代码如下
  1. #include <stdio.h>
  2. namespace A {
  3. int ID = 1;
  4. }
  5. namespace {
  6. int ID = 11;
  7. }
  8. namespace B {
  9. int ID = 21;
  10. }
  11. namespace {
  12. int ID = 41;
  13. }
  14. int main(void){
  15. printf("ID %d \n",ID);
  16. }
编译报错,如下
  1. t_anonymity_space.cpp:14: error: redefinition of ‘int ::ID’
  2. t_anonymity_space.cpp:7: error: ‘int ::ID’ previously defined here
在不同的文件中呢
  1. //file def.h
  2. namespace {
  3. int ID = 41;
  4. }
  1. #include <stdio.h>
  2. #include "def.h"
  3. namespace A {
  4. int ID = 1;
  5. }
  6. namespace {
  7. int ID = 11;
  8. }
  9. namespace B {
  10. int ID = 21;
  11. }
  12. int main(void){
  13. printf("ID %d \n",ID);
  14. }
编译报错
  1. t_anonymity_space.cpp:7: error: redefinition of ‘int ::ID’
  2. def.h:3: error: ‘int ::ID’ previously defined here
这里说明匿名namespace是在一个空间里。
 
引用其他空间以后的用法
  1. #include <stdio.h>
  2. namespace A {
  3. int ID = 1;
  4. }
  5. namespace {
  6. int ID = 11;
  7. int id = 12;
  8. }
  9. namespace B {
  10. int ID = 21;
  11. }
  12. int main(void){
  13. printf("ID %d \n",ID);
  14. using namespace A;
  15. printf("ID %d - %d - %d \n",A::ID, ::ID, id);
  16. }
输出
  1. ID 11
  2. ID 1 - 11 - 12
引用了其他空间,并且此时此时如果使用
 
匿名空间都是在同一个空间,并且同名的必须加上::加以区分。
我在这里猜测一下,全局变量是不是就是在默认的匿名空间的呢?从现象来看,八成是。

c++ anonymous namespace -- 匿名空间的更多相关文章

  1. anonymous namespace V.S. static variant

    [anonymous namespace V.S. static variant] 在C语言中,如果我们在多个tu(translation unit)中使用了同一个名字做为函数名或者全局变量名,则在链 ...

  2. Kubernetes K8S之Pod跨namespace名称空间访问Service服务

    Kubernetes的两个Service(ServiceA.ServiceB)和对应的Pod(PodA.PodB)分别属于不同的namespace名称空间,现需要PodA和PodB跨namespace ...

  3. scoping作用域,anonymous function匿名函数,built-in functions内置函数

    作用域练习1 def test1(): print('in the test1') def test(): print('in the test') return test1 res = test() ...

  4. c++ 的namespace及注意事项

    前文 下文中的出现的"当前域"为"当前作用域"的简写 namepsace在c++中是用来避免不同模块下相同名字冲突的一种关键字,本文粗略的介绍了一下namesp ...

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

    在C++中,static有一个感觉被较少提及的用法:修饰非成员函数,这个用法实际是从C语言继承来的.其作用是表明这个函数只在当前编译单元中有效.这就使这个函数的所有引用在编译时就可以全部确定,无需进入 ...

  6. 【转】利用匿名namespace解决C++中重复定义的问题

    目录 利用匿名namespace解决C++中重复定义的问题 原文:https://blog.csdn.net/pi9nc/article/details/11267031 利用匿名namespace解 ...

  7. ASP.NET MVC3控制器传递匿名对象到视图实例

    ASP.NET MVC3 + Entity Framework项目中,从控制器传递匿名对象到视图非常常见,原本以为用dynamic能轻松搞定,最后发现我错了: Controller:  代码如下 复制 ...

  8. C++匿名命名空间

    当定义一个命名空间时,可以忽略这个命名空间的名称:      namespce {          char c;          int i;          double d;      } ...

  9. namespace、struct、enum、union、string(day01)

    一 C++概述 C++历史背景 )C++的江湖地位 jave C C++ C# python )C++之父:Bjarne Stroustrup(--) ,Cpre,为C语言增加类的机制 ,Bjarne ...

随机推荐

  1. 清华申请退学博士作品:完全用Linux工作,凸Windows

    清华申请退学博士作品:完全用Linux工作 按尽管我们已经不习惯看长篇大论, 但我还是要说, 这是一篇值得你从头读到尾的长篇文章. 2005年9月22日,清华在读博士生王垠在水木社区BLOG上发表了& ...

  2. Java 实现享元(Flyweight)模式

    /** * 字母 * @author stone * */ public class Letter { private String name; public Letter(String name) ...

  3. CentOS安装postgresql 9.4

    第一步:在CentOS6.5下安装Postgresql 1. 安装PostgreSQL源 # yum install http://yum.postgresql.org/9.4/redhat/rhel ...

  4. HDOJ1728 BFS【STL__queue_的应用】

    STL__queue_的应用 调用的时候要有头文件: #include<stdlib.h> 或 #include<cstdlib> + #include<queue> ...

  5. 创建成功的Python项目

    创建成功的Python项目 前端开发工具技巧介绍—Sublime篇 SEO在网页制作中的应用 观察者模式 使用D3制作图表 英文原文:Create successful Python projects ...

  6. iOS开发中捕获Crash 发送Bug邮件

    在开发过程中,我们有时候会留下Bug,用户在使用我们的app 的时候,有时会出现闪退,这时候我们可以让用户给我们发送邮件,以让我们开发人员更加快速的地位到Bug的所在,以最快的时间解决,同时也提高用户 ...

  7. cocos2d-x3.2中加入Android手机震动

    本人宣布从此博文发出后,我的cocos2dx的引擎从cocos2dx3.1.1跳到cocos2dx3.2,哈哈,事实上变化不大的,不碍事~~~ 以下来说说在cocos中加入Android手机震动的功能 ...

  8. PB数据管道

    数据管道提供了一种不同数据库之间传递数据和(或)表结构的方法. 数据管道对象 要完毕数据管道的功能须要提供例如以下内容: 须要数据源和目标数据库,并可以和这两个数据库正常联接 须要源数据库中的哪些表: ...

  9. Server-side Sessions with Redis | Flask (A Python Microframework)

    Server-side Sessions with Redis | Flask (A Python Microframework) Server-side Sessions with Redis By ...

  10. OpenProcessToken令牌函数使用方法

    >GetCurrentProcessID 得到当前进程的ID OpenProcessToken得到进程的令牌句柄LookupPrivilegeValue 查询进程的权限AdjustTokenPr ...