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. 联想K82------智能电视行业的野蛮入侵者

    智能电视行业近年来“渐入佳境”,一方面得力于智能手机.平板电脑的普及让数码产品的智能化趋势深入人心,智能电视自然成了IT行业的下一个增长点:另一方面则得力于部分企业敢于第一个吃螃蟹,通过他们的创新和开 ...

  2. ACM比赛(11462 Age Sort)

    You are given the ages (in years) of all people of a country with at least 1 year of age. You know t ...

  3. SpringMVC日期类型转换问题三大处理方法归纳

    方法一:实体类中加日期格式化注解 @DateTimeFormat(pattern = "yyyy-MM-dd") private Date receiveAppTime; 方法二: ...

  4. Unix时间戳 POSIX时间 Unix时间

    Unix时间戳(Unix timestamp),或称Unix时间(Unix time).POSIX时间(POSIX time),是一种时间表示方式,定义为从格林威治时间1970年01月01日00时00 ...

  5. 动态网页爬取例子(WebCollector+selenium+phantomjs)

    目标:动态网页爬取 说明:这里的动态网页指几种可能:1)需要用户交互,如常见的登录操作:2)网页通过JS / AJAX动态生成,如一个html里有<div id="test" ...

  6. ajaxSubmit提交文件表单不执行success

    先描述一下我遇到的问题,系统里所有的表单都用ajaxSubmit来提交,成功回调success函数,普通表单都是没有问题的,但是有文件上传的表单就不行了,不会回调success,经验证会回调compl ...

  7. AT&T汇编

    AT&T汇编和8086汇编语言虽然两者很相似,但是还是不能根据8086的语法规则来读AT&T汇编的吧,所以还是要看看AT&T汇编的语法规则,因为在读内核代码时,跟硬件打交道的部 ...

  8. Makefile学习(二)[第二版]

    复杂实例 #演示样例1:在上一个演示样例的基础上再添加一个可运行文件03test[改动之处已标红] .PHONY: clean all CC = gcc CFLAGS = -Wall -g BIN = ...

  9. PHP - 防止非法调用页面

    这是在服务器内部: 首先定义一个常量 在调用页面的时候,检测是否存在此常量 如果存在,则调用 否则,做出提示. 创建常量: 创建常量的函数名称: define //创建一个常量,以便于页面调用,从主页 ...

  10. ubuntu 安装LaTex

    使用IDE来使用tex,如TexMaker. 1.到http://www.tug.org/texlive/acquire-netinstall.html 下载texlive. 2.linux下命令行, ...