C++. 优先选用别名申明using,而非typedef. 简单概括

本文探讨了C++中使用using关键字替代typedef的原因,重点在于using支持模板化,而typedef不支持。通过实例对比,展示了using在模板声明中的便利性和简洁性,尤其是在处理嵌套类型时的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用using而非typedef的理由主要有两点:

  1. typedef不支持模板化,但别名申明可以
  2. 别名模板可以让人免写”::type“后缀,并且在模板内,对于嵌套typedef的引用经常要求加上typename前缀

对于观点1,对于像相面的引用是允许的:

template<class T>
using MyAllocList = std::list<T, MyAlloc<T>>;

但是typedef就无能为力了,要使用typedef实现上面的引用需要如下定义:

template<class T>
struct MyAllocList {
    typedef std::list<T, MyAlloc<T>> type;
};

MyAllocList<Widget>::type lw;

更坏的情况是,如果要在模板内使用typedef来创建一个链表,它容纳的对象型别由模板形参指定的化,那么就要给typedef的名字前一个typename前缀:

template<class T>
class Widget {
public:
    typename MyAllocList<T>::type list;
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值