假设:
namespace One {
void foo(int x) {
munch(x + 1);
}
};
namespace Two {
// ... see later
}
...
void somewhere() {
using namespace Two;
foo(42);
...
以下两种变体之间有什么区别:
A)
namespace Two {
void foo(int x) {
munch(x + 1);
}
};
和b)
namespace Two {
using One::foo;
};
编辑:很明显(a)重复代码,这绝不是一个好主意。问题更多是关于重载解析等...如果在其他可能的名称空间中还有其他foo
或munch
es会怎样?
答案 0 :(得分:1)
使用a,它们实际上是不同的函数,但是对于b,这两个函数是相同的:
assert(&One::foo == &Two::foo);
这很少重要;更大的担忧是重复逻辑。
答案 1 :(得分:0)
至于用法,它们是等价的。至于代码,如果a)你正在复制函数foo()
代码。也就是说,两个版本都会在foo()
内提供Two
函数,但a)情况会为foo
生成两次代码,因为编译器在发现它时没有任何提示是一样的功能。