2010-11-06 128 views
1

考虑:使用声明将名称移动到另一个名称空间?

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)重复代码,这永远不应该是一个好主意。问题更多的是有关重载分辨率等......如果在其他命名空间中有其他foo s或munch es会怎么样?

+0

“using One :: foo;”被称为使用声明; using-directive是“using namespace N;”。 – 2010-11-06 19:39:31

回答

1

有了,其实都是不同的功能,但与B,这两个功能是相同的:

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

这种情况很少会事宜;更大的担忧是重复逻辑。

0

至于它们的用法是相同的。至于代码,在情况下a)你正在复制函数foo()的代码。也就是说,两个版本都会在Two内提供foo()函数,但a)情况会生成foo两次的代码,因为编译器没有任何提示发现它是相同的函数。