• c++ anonymous namespace -- 匿名空间


    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 ",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 ",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 ",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 ",ID);
    14.         using namespace A;
    15.         printf("ID %d - %d - %d ",A::ID, ::ID, id);
    16. }
    输出
    1. ID 11
    2. ID 1 - 11 - 12
    引用了其他空间,并且此时此时如果使用
     
    匿名空间都是在同一个空间,并且同名的必须加上::加以区分。
    我在这里猜测一下,全局变量是不是就是在默认的匿名空间的呢?从现象来看,八成是。
  • 相关阅读:
    ANDROID_MARS学习笔记_S04_004_用HTTPCLENT发带参数的get和post请求
    ANDROID_MARS学习笔记_S04_003_用HttpClent发http请求
    ANDROID_MARS学习笔记_S04_002_用AsyncTask实现异步操作
    ANDROID_MARS学习笔记_S04_001_OAUTH获取request_token
    ANDROID_MARS学习笔记_S04_001_OAuth简介
    ANDROID_MARS学习笔记_S03_009_GOOGLEMAP3
    ANDROID_MARS学习笔记_S03_008_GOOGLEMAP2
    ANDROID_MARS学习笔记_S03_007_GoogleMap1
    适配ios9出现的问题:-canOpenURL: failed for URL
    使用第三方SDK出现: duplicate symbol _llvm.cmdline in:
  • 原文地址:https://www.cnblogs.com/timssd/p/4781108.html
Copyright © 2020-2023  润新知