使用“namespace foo {”而不是在头文件之外明确限定

时间:2011-08-08 15:22:27

标签: c++

如果声明了一个函数:

namespace foo {
    void bar();
}

大多数人都定义了这样的功能:

void foo::bar() {
    ...
}

但我喜欢这样做:

namespace foo {
    void bar() {
        ...
    }
}

我更喜欢这种风格,因为它使我不再需要重新输入foo ::,这在接受在同一名称空间中声明的类型的函数参数中通常是乏味的。此外,它更容易重命名整个命名空间。

我想知道为什么我几乎从未在其他人的代码中看到我的风格,除了额外的缩进级别(并且你甚至不必缩进命名空间)之外,它是否有任何缺点?

3 个答案:

答案 0 :(得分:4)

如果您使用foo::bar表单,并意外定义了该功能 不正确的参数,您将收到编译器错误。如果你把 在源文件的名称空间中定义,不同的参数会 只是导致定义不同的功能。你不会得到一个 错误,直到您尝试链接使用您的函数的代码(在 DLL的情况,可能直到运行时)。

答案 1 :(得分:0)

在命令行上查找foo::bar并不容易。让foo::bar grep是非常好的。

答案 2 :(得分:-2)

namespace foo {
    void bar {
        ...
     }
 }

可能导致多个定义错误。此错误发生在链接时。

假设您已将此namespace foo放在头文件中并在其中定义了函数bar()。现在,当您将此头文件包含到多个.cpp文件时,将生成foo::bar()的多个定义。因此,链接器错误。

[注意:我假设在第一种情况下,您在.cpp文件中定义foo::bar。]