从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 
#include 
#include 
#include 
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 
//typedef std::vector 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;  
}

你可能感兴趣的:(C++11常用特性,C++基础)