【问题标题】:Using-declaration to move name to another namespace?使用声明将名称移动到另一个命名空间?
【发布时间】:2011-05-06 02:40:18
【问题描述】:

给定:

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 怎么办?

【问题讨论】:

  • "使用 One::foo;"被称为使用声明;使用指令是“使用命名空间 N;”。

标签: c++ namespaces using-declaration


【解决方案1】:

使用a,它们实际上是不同的功能,但是使用b,这两个功能是相同的:

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

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

【讨论】:

    【解决方案2】:

    就用法而言,它们是等价的。至于代码,如果 a) 您正在复制函数 foo() 代码。也就是说,两个版本都将在Two 中提供foo() 函数,但是a) 案例生成foo 的代码两次,因为编译器没有任何提示发现它是相同的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-27
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 2017-02-13
      • 1970-01-01
      • 2021-11-10
      相关资源
      最近更新 更多