从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;  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值