質問

与えられた:

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

namespace Two {
  // ... see later
}

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

次の2つのバリエーションに違いはありますか。

a)

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

そしてb)

namespace Two {
  using One::foo;
};

編集:(a)決して良い考えではないコードを複製することは明らかです。問題は、過負荷解像度などについての詳細です...他にある場合はどうなりますか foosまたは munchおそらく他の名前空間のes?

役に立ちましたか?

解決

Aでは、実際には異なる関数ですが、Bでは、2つの関数は同一です。

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

これはめったに重要ではありません。より大きな懸念は、ロジックを複製することです。

他のヒント

使用法に関しては、それらは同等です。コードに関しては、ケースa)機能を複製しています foo() コード。つまり、両方のバージョンが利用可能になります foo() 内部で機能します Two, 、しかしa)ケースはのコードを生成します foo コンパイラがそれを発見することにヒントがないため、2回は同じ機能であるためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top