2009-09-10 194 views
4

我很清楚使用命名空间,但是,我偶尔偶尔会遇到使用特定类的使用方法。例如:关于“使用”关键字的问题

#include <string> 
using namespace std; 
(...) 

但是 - 飘飞,我看到:

using std::string; 

我应该如何解释这种情况下,“使用”?

干杯

回答

23

使用的std :: string只是进口的std :: string到当前范围(换言之,你可以用 '串',而不是 '的std :: string')未经::性病进口一切进入当前范围。


编辑:澄清后评论。

+1

这样做的目的是不污染你的当前命名空间和其他命名空间中的所有东西。例如,std命名空间拥有很多东西。如果你不需要大部分时间,那么'使用std'并把它全部带入是一件很愚蠢的事情。 – 2009-09-10 18:42:09

+4

一般的指导原则是不要在库标题中使用“using ...”,因为它会污染图书馆用户的名字空间。请记住:无法撤消“使用”。 – jdehaan 2009-09-10 19:44:21

3

在这种情况下,它允许您在没有限定的情况下绑定到名称空间内的特定类型。与第一种允许您绑定到任何类型的案例相反。

3

您将能够使用string类,而不需要将std ::放在它之前。然而,如果你想使用其他的东西,例如一个向量,那么你需要使用std::vector

12

using namespace foo允许您访问命名空间foo中的所有名称没有限定。 using foo::bar允许您在没有资格的情况下使用bar,但不能使用foo中的任何其他名称。

1

也让事情变得更复杂的是有可能做到这一点:

class Base { 
protected: 
    void f(); 
}; 
class Fun: public Base { 
public: 
    using Base::f; 
}; 

,现在你有很好的公共方法。