给专家的一个快速提示:C++11 允许声明未命名的命名空间inline
。这对我来说似乎是多余的;在未命名的命名空间中声明的东西已经被使用,就好像它们是在封闭的命名空间中声明的一样。
所以我的问题是:这是什么意思
inline namespace /*anonymous*/ {
// stuff
}
以及它与传统的有何不同
namespace /*anonymous*/ {
// stuff
}
我们从 C++98 了解和喜爱的东西?任何人都可以举例说明inline
使用时的不同行为吗?
编辑:只是为了澄清,因为这个问题已被标记为重复:我一般不会询问命名的内联命名空间。我了解那里的用例,我认为它们很棒。我特意询问将未命名的命名空间声明为inline
. 由于未命名的命名空间必须始终是 TU 本地的,因此符号版本化理性似乎并不适用,所以我很好奇添加的inline
实际作用。
顺便说一句,关于未命名命名空间的标准 [7.3.1.1] 说:
inline
当且仅当它出现在unnamed-namespace-definition中时才出现
但这在我的非语言律师眼中似乎是同义反复——“如果它出现在定义中,它就出现在定义中”!对于加分,任何人都可以解释这个标准的实际意思吗?
编辑: Cubbi 在评论中声称加分:
标准是说未命名命名空间定义的行为就好像它被替换为出现在X中的X如果它出现在未命名命名空间定义中
inline