C++ 在命名空间内声明和定义-不确定它是否有效,因为它';是正确的还是偶然的

C++ 在命名空间内声明和定义-不确定它是否有效,因为它';是正确的还是偶然的,c++,namespaces,C++,Namespaces,直截了当 我有一个.h文件,如下所示 namespace ns { namespace n1 { class a {funct();} class b {funct();} } namespace n2 { class a {funct();} class b {fu

直截了当 我有一个.h文件,如下所示

namespace ns
    {
    namespace n1
        {
        class a
            {funct();}
        class b
            {funct();}
        }
    namespace n2
        {
        class a
            {funct();}
        class b
            {funct();}
        }
    }
通常,我会以以下方式在.cpp文件中定义函数:

int ns::n1::a::funct(){return 1;}
int ns::n1::b::funct(){return 1;}
int ns::n2::a::funct(){return 1;}
int ns::n2::b::funct(){return 1;}
今天我注意到这个和.cpp文件一样有效

namespace ns
    {
    namespace n1
        {
        a::funct(){return 1;}
        b::funct(){return 1;}
        }
    namespace n2
        {
        a::funct(){return 1;}
        b::funct(){return 1;}
        }
    }
这在组织具有名称空间树的.cpp文件时似乎非常有用

这是一个标准,还是只是偶然的

这是一个标准,还是只是偶然的


这是正确的,不是事故的结果。依我看,这也是更好的方法。我认为这样更好,因为您不必重复名称空间。

这是预期的行为。就像在命名空间中声明类一样,您可以在命名空间中定义其成员。您可以认为,在一个包含多个命名空间的大型文件中,读者可能不确定正在查看哪个命名空间,但这两种情况加在一起可能表明您应该将代码拆分为多个文件。@TimRandall,当a.h文件变大时,最好将其拆分为多个.h文件。