如果声明了一个函数:
namespace foo {
void bar();
}
大多数人都定义了这样的功能:
void foo::bar() {
...
}
但我喜欢这样做:
namespace foo {
void bar() {
...
}
}
我更喜欢这种风格,因为它使我不再需要重新输入foo ::,这在接受在同一名称空间中声明的类型的函数参数中通常是乏味的。此外,它更容易重命名整个命名空间。
我想知道为什么我几乎从未在其他人的代码中看到我的风格,除了额外的缩进级别(并且你甚至不必缩进命名空间)之外,它是否有任何缺点?
答案 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
。]