【发布时间】:2017-03-02 22:19:34
【问题描述】:
如果定义了命名空间inline,是否还需要声明扩展命名空间inline?换句话说,是否允许将命名空间声明为内联一次并在扩展声明中省略限定符?
【问题讨论】:
-
这也被问到here,虽然没有回答
标签: c++ c++11 namespaces inline
如果定义了命名空间inline,是否还需要声明扩展命名空间inline?换句话说,是否允许将命名空间声明为内联一次并在扩展声明中省略限定符?
【问题讨论】:
标签: c++ c++11 namespaces inline
我有机会请教了最好的顾问 - 编译器 (g++ 4.9.2) :)
所以我发现了什么:
不必将命名空间限定为内联在扩展定义中。命名空间的类型似乎在定义声明中是固定的(=编译器看到的第一个)。随后的限定条件被简单地忽略。因此,如果有人试图在扩展定义中使命名空间内联,编译器不会给出任何特殊警告,而只会抱怨缺少类/函数声明。
仍然取决于应用程序是否限定扩展名称空间。在我的情况下,这是没有必要的,因为继承确保了明确的包含层次结构。如果不是这种情况,在头文件中限定内联命名空间可能仍然是个好主意,因为可能不知道哪个声明将是定义的。
【讨论】: