第7.3.1.2/1号
名称空间的成员(包括模板的显式专门化(14.7.3))可以在该命名空间中定义。[例子: 命名空间X{ void (){/./}
为了在命名空间中定义函数,您必须使用其中一个说明符:static或inline。我说的对吗?
发布于 2014-09-02 13:36:43
不是的。您可以在带有非内联外部链接的命名空间中定义它,只要程序中只有一个定义(以满足“一个定义规则”的要求)。
通常,这意味着您可以像在源文件中那样定义它(因此它只能在单个翻译单元中定义一次),但是如果在一个标题中定义它(可能是inline,或者可能是static,或者在不寻常的情况下,在一个未命名的命名空间中),则必须声明它为多个翻译单元所包含。但这与定义是否在其命名空间内无关。
发布于 2014-09-02 13:23:37
可以想象,您有一个具有声明的头文件:
namespace X {
    void f();
}以及包含以下内容的翻译单元,包括此标头:
namespace X {
    void f() { / ... / }
}作为以下备选办法:
void X::f() { / ... / }或者一个翻译单元,它不包含与X::f相关的内容,既声明并定义函数:
namespace X {
    void f() { / ... / }
}发布于 2014-09-02 13:29:16
即使没有标头,也可以有一个包含以下内容的.cpp文件:
namespace X {
    void f() { / ... / }
}或者,如果它只包含在一个翻译单元中,则可以将其放在标题中。
此外,即使头包含在多个翻译单元中,也可以如下所示:
namespace {
    namespace X {
        void f() { / ... / }
    }
}https://stackoverflow.com/questions/25624381
复制相似问题