我在我们的代码库中看到了两种风格。简单的问题:更喜欢什么?
void
someNsName::someFunc( int a, int b )
{/*...*/}
void
someNsName::someOtherFunc( int c )
{/*...*/}
Run Code Online (Sandbox Code Playgroud)
或者
namespace someNsName {
void
someFunc( int a, int b )
{/*...*/}
void
someOtherFunc( int c )
{/*...*/}
} // NS someNsName
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢后者,尤其是当您必须从someNsName其他方面获得很多资格时。但还有更多原因吗?
两者最大的区别是函数不能先用限定名声明。
// header
namespace foo {
void bar(int);
}
// implementation
namespace foo {
void bar(long) {
}
}
Run Code Online (Sandbox Code Playgroud)
我在参数列表中犯了一个错误。它声明了一个重载而不是我想要的函数。只有在链接期间才有可能发现问题。这还不错,但仍然需要一些时间才能真正弹出。我是否将实现编写为
void foo::bar(long) {
}
Run Code Online (Sandbox Code Playgroud)
编译实现文件时会立即出现编译器错误。之前没有在 中声明过这样的函数foo,所以我无法定义它。
对于长命名空间列表,你总是可以做到的
namespace impl = some::other::ns;
void impl::bar() {}
Run Code Online (Sandbox Code Playgroud)
我认为这是两种方法之间最重要的区别。但同样,两种风格都有(不同的)优点,所以只要我们一致,任何一种都可以。