给定:

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或 munch在其他名称空间中?

有帮助吗?

解决方案

对于A,它们实际上是不同的功能,但是对于B,这两个函数是相同的:

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

这很少重要。更大的关注点是重复逻辑。

其他提示

至于用法,它们是等效的。至于代码,如果a)您正在重复该功能 foo() 代码。也就是说,这两个版本都可以提供 foo() 内部功能 Two, ,但是a)案例生成了代码 foo 两次,因为编译器没有任何暗示发现它是相同的功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top