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