using有2种用法:命名空间、类型命名。

C语言只有命名空间这一种用法,C++有2种用法。

1,命名空间(C和C++用法一样)

(1)使用整个命名空间

如:using namespace std;

也可以自定义命名空间

(2)使用命名空间中的某个成员

如:using std::vector;

2,类型命名(C++独有)

(1)普通类型

    using d = double;
    d x = 1.23;

这个用法和typedef一样

    typedef double d;

(2)函数指针

    using pfunc=float (*)(float, float);
    pfunc f = pow;
    cout << f(2, 3);

这个用法和typedef一样

    typedef float (*pfunc)(float, float);

如果函数有重载,那么函数指针赋值时选择哪个重载,和直接调用时选择哪个重载的逻辑是类似的:

直接调用,按照入参类型选择重载,函数指针赋值,按照入参和出参类型选择重载

(3)模板别名

无参别名:(包括有参的vector变成无参的vt这种情况)

    using vt=vector<int>;
    vt v;
    v.push_back(123);
    cout<<v[0];

这个用法和typedef一样

typedef vector<int> vt;

有参别名:

template <typename T>
using vt=vector<T>;

int main()
{
    vt<int> v;
    v.push_back(123);
    cout<<v[0];
    return 0;
}

注意,using给有参类型起别名,必须在函数外进行

这个用法,typedef没有,只有using可用于定义带模板的类型