- 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;
}