c++ - 在命名空间内定义函数还是限定函数?

标签 c++ namespaces

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

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/

相关文章:

c++ - 从 C++ 中的文本文件中打印出空格

c++ - forward_list : assign(_InputIterator __first, _InputIterator __last)/assign(size_type __n, const _Tp& __val)

c++ - c++ 方法内部的异常

PHP 命名空间和在声明中使用前缀

c# - 'Class' 是一个命名空间,但像 'type' 一样使用

c++ - 滤波器 Z 角旋转 MPU 6050 + Arduino

c++ - 将容器 value_type 作为模板参数传递?

c++ - 如何将 "pass"命名空间作为参数?

ruby-on-rails - rspec - 使用命名空间时,rails 路由到错误的 Controller ,但只是有时

php - 如何在不修改太多代码的情况下专门化一个命名空间的类并使用它?