引入namespace

using namespace std;

将nampespace中单个名字注入到当前作用域

将其它 namespace 的成员引入本命名空间的 当前作用域 (包括其嵌套作用域)  。 一次只引入一个命名空间成员。

using std::map

map<int, int> m;

类型重定义

//等价: typedef void (*fun)(int, int);
using fun = void (*)(int, int);

//等价: typedef short int16
using int16 = short;

using MyVector = std::vector<T>;
//两者等价
std::vector<int> v1;
MyVector<int> v2;

改变派生类对父类成员的访问控制

尽管 Derived 对 base 是私有继承,但通过 using 声明,我们还是可以在 Derived 中访问其成员,且后续的继承同样不受 private 限定的影响。

class Base {
protected:
    int bn1;
    int bn2;
};

class Derived: private Base{
public:
    using Base::bn1;
};

class DerivedAgain: public Derived{
};

int main(){
    Derived d;
    DerivedAgain da;

    d.bn1 = 1;
    d.bn2 = 2; //error, 'bn2' is a private member of 'Base'
    da.bn1 = 3;  //ok

    std::cout<<d.bn1<<std::endl;
    return 0;
}