美文网首页
内联名字空间

内联名字空间

作者: 混世太保 | 来源:发表于2018-07-15 22:52 被阅读0次

    inline namespace name的作用就是将该名字空间里的变量的范围导入到父命名空间里。
    如果是普通的命名空间套命名空间,现在子命名空间里有一个模板类,如果我想要去特化模板类的一个版本,则无法编译通过,但是如果用了inline的话,子命名空间里的变量和类和函数等等就会被导入到父命名空间里。

    主要有两个作用,所以c++11引入了这个特性。
    可以根据编译环境的不同,条件导入不同的名空间。比如A::A1, A::A2。则我们可用宏来控制inline这个属性,这样子,可在名空间A中导入不同的子命名空间。
    因为程序库在长期的发展中,可能版本间的接口和实现等都随着程序库的发展而发生了变化,那么根据需要将合适的名字空间导入到父命名空间,会方便库的使用。

    匿名的名字空间,同样可以把其包含的名字导入到父名字空间,但是无法允许在父命名空间对模板进行特化。

    c++语言还有个特性,叫做ADL(Argument Dependent name LookUp)参数关联名称查找。
    这个特性允许编译器在名字空间内找不到函数名称的时候,在参数的命名空间内查找函数名字。

    ADL带来了一些使用的便利,但是也在一定程度上破坏了namespace 的封装性。

    相关文章

      网友评论

          本文标题:内联名字空间

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