C++11後的typedef與using

  • 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;  
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章