1

鉴于:

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

namespace Two {
  // ... see later
}

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

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

一个)

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

b)

namespace Two {
  using One::foo;
};

编辑:很明显,(a)重复了永远不是一个好主意的代码。问题更多的是关于重载解析等。如果在其他名称空间中可能还有其他foos 或munches 怎么办?

4

2 回答 2

1

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

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

这很少有关系;更大的担忧是重复逻辑。

于 2010-11-06T19:33:03.450 回答
0

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

于 2010-11-06T19:25:29.837 回答