美文网首页
【c++】匿名名字空间

【c++】匿名名字空间

作者: petit_prince | 来源:发表于2017-08-23 19:55 被阅读0次

转载自:http://hi.baidu.com/thinapple/blog/item/049df24f6d30bc3eaec3aba7.html

    名字空间(namespace),是C++提供的一个解决符合名字冲突的特性。标准规定,在不同名字空间中命名相同的符号,代表不同的实体。通常,利用定义名字空间的办法,可以使模块划分更加方便,减少模块间的相互影响。

    通常定义一个名为MyNameSpace的名字空间,其形式为:

namespace MyNameSpace

{

    ...

}

    如果不写MyNameSpace,在C++里也是允许的,这就是匿名名字空间。按照标准的描述,匿名名字空间等价于:

namespace unique

{

    ...

}

using namespace unique;

    这里的unique由编译器决定,并保证这是一个在程序里唯一的名字空间。

    因此,可以看出,匿名名字空间具有一个很有用的特性,那就是,对于不同的编译单元(cpp文件),“同一个”匿名名字空间中的对象,会被当作不同的实体。而这个特性和全局的static修饰是一致的。那这能带来什么好处呢?原有的static不是很好用的吗?

    是的,static修饰,在处理函数和变量(包括常量)的时候已经工作得很好了。但是static的缺陷是不能修饰class和struct这样的结构定义。因此,当出现这种情况: 在某个cpp实现里需要辅助的几个结构a,b,c来帮助实现,但是又不希望这些结构污染整个名字空间。这时一般有如下两种解决办法:

1)定义一个不常用的名字空间,将a, b, c 放入其中。

这样,需要程序员自己保证名字空间的名字唯一。

2)使用类内部结构体定义。

这样,如果结构比较复杂,比如,有静态成员,就行不通了。而且如果这些结构不是一个类独自使用而需要几个类共享,处理起来也比较麻烦。

这时,如果使用匿名名字空间,就可以比较完美解决问题了。

【总结】: 匿名名字空间提供了类似在全局函数前加 static 修饰带来的限制作用域的功能。它的这种特性可以被用在struct和class上, 而普通的static却不能。

相关文章

  • 【c++】匿名名字空间

    转载自:http://hi.baidu.com/thinapple/blog/item/049df24f6d30b...

  • C++ 匿名命名空间

    作用: 类似与 static 在 cpp 文件中声明的全局变量, 具有内部链接属性. 编译器会为匿名空间在当前源文...

  • 读《google C++风格指南》有感

    1. 复习内容 1.1 匿名命名空间 字面意思:声明命名空间时忽略名字编译器内部会为这个命名空间生成一个唯一的名字...

  • Go语言之结构体的匿名函数和字段

    匿名函数 匿名字段

  • C++ 基础知识点大纲

    C++ C++对C的加强 namespace命名空间 C++命名空间基本概念 C++命名空间定义,使用语法,意义 ...

  • C++ 类从属名称的歧义

    C++ 里,要访问名字空间中从属的名字,使用的是 NameSpace::NestName。于是(不知道为什么有此于...

  • 真话-匿名空间

    在陌生人面前,我们说什么做什么没那么多顾忌。说了转身各奔东西,也许此生不会再见。不怕有任何影响,只需一吐为快...

  • 第十章 名字控制

    简介:static如何控制存储和可见性;通过C++的名字空间特征来控制访问名字的改进方法。;使用已经采用C语言编写...

  • 05 NDK-C++基础(一)

    1 C++对C的加强 1.1 namespace命名空间 1.1.1 C++命名空间基本概念 在C/C++中,变量...

  • C++ 匿名函数

网友评论

      本文标题:【c++】匿名名字空间

      本文链接:https://www.haomeiwen.com/subject/dzejdxtx.html