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. 在 vb中 "end","unload me","exit sub" 之间的区别

    之前就想过这个问题,这么熟悉的几个东西居然对他们分析的不是很透彻. “End”  跟  “Unload  Me”  在敲程序 的时候经常敲到,“exit  sub”  更是熟悉,下面,解析: End  ...

  2. Linux命令之find(一)

    find命令的使用格式为:find options path expressions find命令事实上有两种options,一种是"真正属于自己的",还有一种位于expressi ...

  3. 自定义类似QMutexLocker的CMutexLocker

    最近做项目遇到一个需求,有一个buttonSlot()执行要耗点时间,为了防止用户无限制的乱点出现问题,考虑加一个互斥锁,使得每次执行完后才允许执行下一次.大概意思是: //QMutex  m_mut ...

  4. jackson 转json. 过滤null值

    @Test public void tttttt() throws JsonGenerationException, JsonMappingException, IOException { Objec ...

  5. 基于visual Studio2013解决C语言竞赛题之0802图书信息查询

     题目 解决代码及点评 /* 功能:有一批图书,每本书有:书名(name),作者(author) , 编号(num),出版日期(date)四个数据, 希望输入后按书名的字母顺序将各书的记录排列好, ...

  6. Fedora20安装完Nvidia后启动一直黑屏解决办法。

    安装完Fedora20后,把Nvidia驱动装上后重起机器一直黑屏时,切换到命令行下:Alt+F2  登陆上去,然后直接更新: su -c ‘yum update’ ,再重起就OK了.

  7. c++怎样让返回对象的函数不调用拷贝构造函数

    我们知道拷贝构造函数有两种“默默”的方式被调用 1. 想函数传入 值参数 2. 函数返回 值类型 今天我们讨论函数返回值类型的情况. 得到结论是 1. 当对象有拷贝构造函数(系统为我们生成.或者我们自 ...

  8. 在WINDOWS下 三步快速配置 eclipse c++ 环境

    所需软件 1.Eclipse IDE for C/C++ Developers http://www.eclipse.org/downloads/packages/eclipse-ide-cc-dev ...

  9. android开发1:安卓开发环境搭建(eclipse+jdk+sdk)

    计划折腾折腾安卓开发了,从0开始的确很痛苦,不过相信上手应该也不会太慢.哈哈 一.Android简介 Android 是基于Linux内核的软件平台和操作系统. Android构架主要由3部分组成,l ...

  10. Troubleshooting(updating...)

    记录了工作和学习中一些杂碎的问题. 问题:RDP一直处于连接状态,除非重启 描述:表面看上去是应该在一定时间还连接不上,就让它断开.深层问题是,初次连接一个新的IP地址,Win7以上的系统,会有个CA ...