使用声明将名称移动到另一个名称空间?

时间:2010-11-06 19:22:17

标签: c++ namespaces using-declaration

假设:

namespace One {
  void foo(int x) {
    munch(x + 1);
  }
};

namespace Two {
  // ... see later
}

...
void somewhere() {
  using namespace Two;
  foo(42);
  ...

以下两种变体之间有什么区别:

A)

namespace Two {
  void foo(int x) {
    munch(x + 1);
  }
};

和b)

namespace Two {
  using One::foo;
};

编辑:很明显(a)重复代码,这绝不是一个好主意。问题更多是关于重载解析等...如果在其他可能的名称空间中还有其他foomunch es会怎样?

2 个答案:

答案 0 :(得分:1)

使用a,它们实际上是不同的函数,但是对于b,这两个函数是相同的:

assert(&One::foo == &Two::foo);

这很少重要;更大的担忧是重复逻辑。

答案 1 :(得分:0)

至于用法,它们是等价的。至于代码,如果a)你正在复制函数foo()代码。也就是说,两个版本都会在foo()内提供Two函数,但a)情况会为foo生成两次代码,因为编译器在发现它时没有任何提示是一样的功能。