C++ 关于“的问题”;使用;关键词

C++ 关于“的问题”;使用;关键词,c++,C++,我很清楚使用名称空间,但是,我时不时地会遇到一个使用,它使用一个特定的类。例如: #include <string> using namespace std; (...) 在这种情况下,我应该如何解释“使用” Cheers使用std::string只需将std::string导入当前范围(也就是说,您可以只使用'string'而不是'std::string'),而无需将所有内容从::std导入当前范围 编辑:注释后的澄清。在本例中,它允许您无条件地绑定到命名空间中的特定类型。与第

我很清楚使用名称空间,但是,我时不时地会遇到一个使用,它使用一个特定的类。例如:

#include <string>
using namespace std;
(...)
在这种情况下,我应该如何解释“使用”


Cheers

使用std::string只需将std::string导入当前范围(也就是说,您可以只使用'string'而不是'std::string'),而无需将所有内容从::std导入当前范围



编辑:注释后的澄清。

在本例中,它允许您无条件地绑定到命名空间中的特定类型。与第一种情况相反,第一种情况允许您绑定到任何类型。

您将能够使用
string
类,而无需将std::放在前面。但是,如果您想使用其他内容,例如向量,则需要使用
std::vector

使用命名空间foo
允许您无需限定即可访问命名空间foo中的所有名称
使用foo::bar
允许您无条件地使用
bar
,但不能使用foo中的任何其他名称。

也会使事情变得更复杂,可以这样做:

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

现在您有了一个很好的公共方法。

这样做的目的是不让来自另一个名称空间的所有内容污染您当前的名称空间。例如,std名称空间包含很多内容。如果您碰巧不需要大部分,那么使用std并将其全部包含进来是有点愚蠢的。一般的指导原则是永远不要在库标题中使用“using…”,因为这样会污染库用户的名称空间。请记住:没有办法撤消“使用”。
class Base {
protected:
    void f();
};
class Fun: public Base {
public:
    using Base::f;
};