在编写C ++成员定义时,有没有理由更喜欢将它们放在命名空间块中而不是完全限定它们,反之亦然?

时间:2012-05-22 01:00:39

标签: c++ fully-qualified-naming

在C ++类中,我们可以用两种样式中的任何一种来编写成员。我们可以将它们放在命名空间块中,或者我们可以完全限定每个。

是否有理由偏爱另一种风格?

头文件看起来像这样(bar.h):

namespace foo
{
    class Bar
    {
    public:
        Bar();
        int Beans();
    };
}

样式1(bar.cpp) - 名称空间块中的声明

#include "bar.h"
namespace foo
{
    Bar::Bar()
    {
    }

    int Bar::Beans()
    {
    }
}

样式2(bar.cpp) - 完全限定的声明

#include "bar.h"

foo::Bar::Bar()
{
}

int foo::Bar::Beans()
{
}

所以我的问题是:是否有理由偏爱另一种风格?

1 个答案:

答案 0 :(得分:0)

这是James Kanze在回答another similar question时发布的可能答案。 (编辑:注释帖子中的注释,这仅适用于非成员函数)

首选完全合格的表格(格式2)。

以这种方式编写的函数是明确的定义,而不是声明。

也就是说,使用样式2,如果你不小心定义了一个参数不正确的函数,你会得到一个编译错误提醒你这个事实。

使用样式1,如果定义具有不正确参数的函数,它将定义不同的函数。它编译正常,但是你会得到一个链接器错误,说明该方法没有定义。这可能比样式2产生的编译器错误更难诊断。