2017-03-02 52 views
1

如果命名空间被定义为inline,那么是否需要声明扩展命名空间inline?换句话说,它是否允许声明一个命名空间只能内联一次,而忽略扩展声明中的限定符?内联命名空间是否必须始终具有这样的资格?

+0

这也是问[这里](http://stackoverflow.com/questions/11016220/what-are-inline-namespaces-for),虽然没有回答 –

回答

0

我有机会向最好的顾问 - 编译器(G ++ 4.9.2):)

所以,我发现了什么:

它时并不需要资格namespces是内联扩展定义。命名空间的类型似乎在定义声明中被修复(=编译器看到的第一个)。随后的资格被忽略。因此,如果有人试图在扩展defenition中内联命名空间,编译器将不会给出任何特殊的警告,而只会抱怨丢失的类/函数声明。

仍然取决于应用程序是否限定扩展名称空间。在我的情况下,这是没有必要的,因为通过继承可以明确包含层次结构。如果不是这种情况,那么在头文件中限定内联命名空间可能还是个好主意,因为可能不知道哪个声明是定义的。

+0

这是接近什么标准说,但不是确切的;请参阅[\ [namespace.def \]/5](http://eel.is/c++draft/namespace.def#5)。 – bogdan

相关问题