using 和 typedef 的别名大作战

在为数据类型创建别名时,我们可以使用 typedefusing关键字。但是二者有什么不同呢 🤔,下面笔者抛砖引玉,做一个简单的介绍。

1. typedef

typedefC++ 中较早引入的一种方法,用于为数据类型创建别名。其基本语法如下:

typedef <existing_type> <new_type_name>;

<existing_type> 是已经存在的数据类型,而<new_type_name> 是为该数据类型创建的新名称。

typedef int Integer; // 创建一个名为Integer的别名,代表int类型

使用 typedef 可以为各种数据类型创建别名,包括基本数据类型(如 intfloat 等)、指针、数组等。

2. using

using 是C++11引入的一种新方法。
语法如下:

using <new_type_name> = <existing_type>;

<existing_type> 是已经存在的数据类型,而<new_type_name> 是为该数据类型创建的新名称。

using Integer = int; // 创建一个名为Integer的别名,代表int类型

与typedef不同,using关键字允许创建模板别名,从而提供了更大的灵活性。

3. 二者差异

  1. 语法差异:
typedeftypedef <existing_type> <new_type_name>;
usingusing <new_type_name> = <existing_type>;
  1. 可读性:
    using更直观,因为它将新名称放在等号的左侧。
  2. 支持模板:
    using 可以创建模板别名,而 typedef 不能。
  3. 可替代性:
    using 可以替代几乎所有 typedef 的用法,并且在 C++11 中已被推荐使用。
// 使用typedef创建别名
typedef int Integer_t;
Integer_t num1 = 10;

// 使用using创建别名
using Integer_u = int;
Integer_u num2 = 20;

// 使用using创建模板别名
template<typename T>
using Pointer_u = T*;
Pointer_u<int> ptr = new int(30);

以上就是一个简单的介绍,感兴趣的朋友可以去参考下面 c++的使用文档。
using from cppreference
typedef from cppreferrence

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
usingtypedef在给类型起别名方面有相似的作用,但它们有一些不同之处。using是C++11引入的关键字,更加灵活和易读。它可以替代typedef的用法,并提供更多的功能和特性。 使用using关键字可以定义类型别名的方式更加直观和清晰,语法也更加简洁。与typedef不同,using可以用于模板的别名定义,并支持模板参数的传递。 下面是一个使用typedef给模板取别名的例子: typedef vector<T> typedef_vector; 而使用using关键字可以这样写: template<class T> using typedef_vector = vector<T>; 上述两种方式的效果是相同的,都是将vector<T>定义为typedef_vector的别名。 总之,使用using关键字相比于typedef有以下优势: 1. 更加直观和清晰的语法 2. 更加灵活,可以用于模板的别名定义 3. 支持模板参数的传递,提供更多的功能和特性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [usingtypedef的区别](https://blog.csdn.net/qq_43706793/article/details/128903741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [17.C++类型别名typedefusing](https://blog.csdn.net/lx_ros/article/details/131739784)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_a_yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值