在命名空间中定义函数还是限定函数

Define a function inside a namespace or qualified?

本文关键字:函数 定义 命名空间      更新时间:2023-10-16

我在我们的代码库中看到了两种样式。简单的问题:你更喜欢什么?

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() {}

我认为这是两种方法之间最重要的区别。但同样,两种风格都有(不同的(优点,所以只要我们一致,任何一种都可以。