类型别名与using

类型别名与using
枫类型别名与using
C++11 的
using在很多人眼里只是typedef的新写法,但它真正的价值在于:写法更直观,尤其是在模板别名场景下比typedef好用很多。
1. typedef 的痛点
传统类型别名通常这样写:
1 | typedef unsigned long ulong; |
简单类型还好,一旦遇到函数指针、模板类型,阅读体验会比较差。
2. using 的基本写法
1 | using ulong = unsigned long; |
这种形式更像“把右边这个类型命名为左边这个名字”,可读性通常会更好。
3. 函数指针例子
1 |
|
4. 模板别名是 using 的强项
这一点是 typedef 做不到的。
1 |
|
如果用 typedef,这里就没法这样直接写模板别名。
5. 常见使用场景
5.1 简化长类型名
1 | using StrIntMap = std::map<std::string, int>; |
5.2 给函数指针或回调命名
1 | using Callback = void (*)(int); |
5.3 模板封装
1 | template <typename T> |
6. using 不只是类型别名
虽然这篇主要讲别名,但 using 在类继承里也有别的用途,比如引入基类成员、继承构造函数等。
不过在日常使用里,最常见的还是“类型别名”这一层。
7. 和 typedef 怎么选?
如果项目已经是现代 C++ 风格,那么新代码里通常更推荐直接用 using。
原因很简单:
- 语义更直观
- 模板别名支持更好
- 复杂类型可读性更高
总结
using 是 C++11 里非常实用的一项语法改进。
简单场景下它只是 typedef 的更清晰替代品,复杂场景下它还能处理模板别名,这一点在现代 C++ 里尤其常用。














