- typedef :
给一个已有,可能比较长比较复杂的类型 重新命名一个新的、简单的、见名知意的别名。
重定义一个类型: typedef old_type_name new_type_name
重定义一个函数指针类型: typedef 返回类型(*新类型)(参数表)
- using :
c++11开始支持使用using 来给一个已经有的类型起别名 重新命名一个新的、简单的、见名知意的别名。
using new_type_name = old_type_name;
举个例子:
#include <iostream>
#include <vector>
#include <functional>
#include <algorithm>
using namespace std;
int add(int a,int b){
return a + b;
}
分别使用typedef和using进行类型重定义:
//function
using Add1 = std::function<int(int,int)>;
typedef std::function<int(int,int)> Add2;
//函数指针
using AddPtr1 = int(*)(int,int);
typedef int(*Addptr2)(int,int) ;
//普通类型
typedef long long Int64;
using int64 = long long;
//自定义类
class IntVal{};
typedef IntVal intval;
using Intval = IntVal;
//定义未知类型的类模板
//template <typename Tp>
//typedef std::vector<Tp> vec; //不允许
template <typename Tp>
using vec = std::vector<Tp>; //c++11允许
使用:
int main(){
Add1 fun1 = add;
cout<<fun1(10,10)<<endl;
Add2 fun2 = add;
cout<<fun2(10,10)<<endl;
AddPtr1 ptr1 = add;
cout<<ptr1(220,20)<<endl;
Addptr2 ptr2 = add;
cout<<ptr2(20,20)<<endl;
vec<int> v;
for (int i = 0;i < 10;++i){
v.push_back(i);
}
for (auto val : v){
cout<<val<<" ";
}
cout<<endl;
return 0;
}