• C++匿名名字空间


    转自:http://blog.csdn.net/eric_arrow/article/details/8978905

    名字空间(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却不能。

  • 相关阅读:
    jvm性能监控(4)–JVM的监控工具Jconsole
    jvm性能监控(3)-jdk自带工具 jps jstack jmap
    jvm性能监控(2)–JVM的监控工具jstat
    jvm(1)性能监控-linux相关命令
    jvm学习(5) 对象的创建与结构
    jvm(4) 对象创建
    jvm学习(3)方法区、堆、对象存储位置
    jvm学习(2)JVM内存说明
    java泛型
    windows下部署spring boot 的jar
  • 原文地址:https://www.cnblogs.com/azbane/p/8527676.html
Copyright © 2020-2023  润新知