typedef 指定符

来自cppreference.com
< cpp‎ | language
  • typedef - 创建能在任何位置替代(可能复杂的)类型名的别名。

目录

[编辑] 解释

typedef 指定符在用于声明decl-specifier-seq 时,指定声明为 typedef 声明,并声明 typedef 名,而非函数或对象。它可于同一行声明一或多个标识符(例如 int 和指向 int 的指针),它可声明数组和函数类型、指针和引用、类类型等。此声明中引入的每个标识符都成为 typedef 名,它是假如关键词 typedef 被移除则标识符本应是的对象或函数的类型的同意语。

typedef 指定符不能与其他指定符组合,除了类型指定符

typedef 名是既存类型的别名,且不声明新类型。 typedef 不能用于更改既存类型名(包含 typedef 名)的含义。一旦声明,则 typedef 名只可重声明为再次指代同一类型。 typedef 名仅在它为可见的作用域有效:不同函数或类声明可定义有不同含义的同名类型。

typedef 指定符不可出现于不含声明器的声明中。

typedef struct X {}; // 病态
(C++17 起)

[编辑] 关键词

typedef

[编辑] 注意

类型别名用不同语法提供同 typedef 的功能,而且亦可用于模板名。

[编辑] 示例

// 简单 typedef
typedef unsigned long ulong;
 
// 下列二个对象拥有同一类型
unsigned long l1;
ulong l2;
 
// 更复杂的 typedef
typedef int int_t, *intp_t, (&fp)(int, ulong), arr_t[10];
 
// 下列二个对象拥有同一类型
int a1[10];
arr_t a2;
 
// 避免必须写 "struct C" 的常见 C 手法
typedef struct {int a; int b;} S, *pS;
 
// 下列二个对象拥有相同类型
pS ps1;
S* ps2;
 
// 错误:存储类指定符不能出现于 typedef 声明
// typedef static unsigned int uint;
 
// typedef 可用在 decl-specifier-seq 中的任何位置
long unsigned typedef int long ullong;
 
// std::add_const ,类似其他元函数,使用成员 typedef
template< class T>
struct add_const {
    typedef const T type;
};
 
typedef struct Node {
    struct listNode* next; // 声明名为 listNode 的新的(不完整)结构体类型
} listNode; // 错误:与先前声明的结构体名冲突

[编辑] 参阅

typedef 声明C 文档