首页 > 编程笔记 > C++笔记 阅读:2

C++ typedef的用法(新手必看)

typedef 是 C++ 语言中的一种关键字,用于为已存在的数据类型赋予新的名字。

这一机制不是为了提高程序运行效率,的主要目的是简化复杂数据类型的声明,从而使代码更加清晰易懂,便于阅读和维护。

例如有一个结构体的名字是 stu,要想定义一个结构体变量就得这样写:
struct stu stu1;
struct 看起来就是多余的,但不写又会报错。如果为 struct stu 起了一个别名 STU,书写起来就简单了:
STU stu1;
这种写法更加简练,意义也非常明确,不管是在标准头文件中还是以后的编程实践中,都会大量使用这种别名。

再例如,我们可以使用 typedef 为复杂的指针类型或容器类型设定更直观的别名,如将 std::vector<int> 定义为 IntVector,这样的命名直接反映了其作为整数向量的用途。

在 C++11 标准引入 using 声明以前,typedef 是定义类型别名的唯一手段,它被广泛应用于为特定平台定义适配的数据类型。

例如,可以定义平台特定的整数大小,如 typedef int int32_t,确保在不同的硬件架构上具有一致的行为和性能。

此外,typedef 在模板编程和处理复杂数据结构时尤为重要,因为它不仅提高了代码的清晰度,还使得程序员能通过语义化的名称来操作类型,极大提升了代码的可读性和可维护性。在深入模板库(如 STL)时,合理运用 typedef 可以有效地管理类型,使得代码结构更加紧凑和高效。

通过这种方式,typedef 成为 C++ 编程中一个不可或缺的工具,帮助开发者在保持代码逻辑清晰的同时,优化了类型的使用和管理。

C++ typedef的适用场景

typedef 的适用场景如下:

1) 定义机器无关的类型,有利于程序的通用与移植。
//对已经存在的类型增加一个类型名,而没有创造新的类型。有时程序会依赖于硬件特性
typedef long double REAL;          //在目标机器上可以获得最高的精度
typedef double REAL;               //在不支持 long double 的机器上
typedef float REAL;                //在连 double 都不支持的机器上

2) 创建易于记忆的类型名:
typedef int size  //此声明定义了一个 int 的同义字,名字为 size

3) 掩饰复合类型:
typedef char Line[81];
定义一个 typedef 的意思就是给 81 个字符元素的数组起了一个昵称 Line。

C++ typedef的使用陷阱

在使用 typedef 时,注意以下陷阱:
1) typedef 声明指针:
typedef char * pstr;
const pstr;
pstr 的类型会被编译器解释为 char * const(一个指向 char 的常量指针),而不是 const char *(指向常量 char 的指针)。

2) typedef 不能与其他存储类共用关键字:
typedef static int FAST_COUNTER; // 编译报错
typedef volatile char VolatileChar;// 编译正确,为 volatile char 创建了别名
typedef 在语法上是一个存储类的关键字(与 auto、extern、mutable、static 等一样),虽然并不真正影响对象的存储特性,但因为它已经占据了存储类关键字的位置,所以在 typedef 声明中不能使用其他存储类关键字。

相关文章