declarationを使用して名前を別の名前空間に移動しますか?
-
29-09-2019 - |
質問
与えられた:
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)決して良い考えではないコードを複製することは明らかです。問題は、過負荷解像度などについての詳細です...他にある場合はどうなりますか foo
sまたは munch
おそらく他の名前空間のes?
解決
Aでは、実際には異なる関数ですが、Bでは、2つの関数は同一です。
assert(&One::foo == &Two::foo);
これはめったに重要ではありません。より大きな懸念は、ロジックを複製することです。
他のヒント
使用法に関しては、それらは同等です。コードに関しては、ケースa)機能を複製しています foo()
コード。つまり、両方のバージョンが利用可能になります foo()
内部で機能します Two
, 、しかしa)ケースはのコードを生成します foo
コンパイラがそれを発見することにヒントがないため、2回は同じ機能であるためです。
所属していません StackOverflow