使用using定义类型别名更推荐,因其语法清晰且支持模板别名,如template using Vec = std::vector,而typedef不支持此类模板操作。

在C++中,typedef 和 using 都可以用来为现有类型定义别名,使代码更清晰、易读,尤其在处理复杂类型时非常有用。虽然两者功能相似,但 using 在现代C++中更推荐使用,特别是在模板场景下。
使用 typedef 定义类型别名
typedef 是从C语言继承来的关键字,语法格式如下:
typedef 现有类型 别名;常见用法包括:
- 为基本类型起别名,提高语义清晰度
- 简化结构体或指针类型的声明
- 用于模板之外的类型重命名
示例:
立即学习“C++免费学习笔记(深入)”;
typedef unsigned int uint;typedef double Coordinate;
typedef int* IntPtr;
struct Point { int x; int y; };
typedef Point Point3D;
uint count = 10;
Coordinate x = 3.14;
IntPtr p = &count;
使用 using 定义类型别名(现代C++推荐)
using 是C++11引入的更直观的语法,格式为:
using 别名 = 现有类型;它比 typedef 更易读,尤其在处理复杂类型和模板时优势明显。
示例:
立即学习“C++免费学习笔记(深入)”;
using uint = unsigned int;using Coordinate = double;
using IntPtr = int*;
using Point3D = Point;
uint count = 20;
IntPtr p = &count;
using 在模板别名中的优势
typedef 无法直接用于创建模板类型别名,而 using 可以。
例如,定义一个通用的容器别名:
templateusing Vec = std::vector
Vec
Vec<:string>words; // 等价于 std::vector<:string>
这种写法无法用 typedef 实现,是 using 的关键优势。
选择建议
虽然 typedef 仍广泛存在,但 using 更符合现代C++风格:
- 语法更清晰,读作“别名等于类型”
- 支持模板别名,扩展性强
- 与auto、decltype等现代特性配合更自然
基本上就这些。新项目中建议优先使用 using。










