typedef声明提供了一种将标识符声明为类型别名的方法,用于替换复杂的类型名。


解释

在声明中使用typedef说明符时,会指定这个声明是typedef声明,而不是变量或函数声明。通常,typedef说明符出现在声明的开头,但允许它出现在类型说明符之后,或者出现在两个类型说明符之间。

typedef声明可以在同一行上声明一个或多个标识符(例如int和指向int的指针),它可以声明数组和函数类型、指针和引用、类类型等。此声明中引入的每个标识符都成为typedef名称,只是省略了typedef。

typedef说明符不能与除类型说明符之外的任何其他说明符组合。

typedef名称是现有类型的别名,不是新类型的声明。Typedef不能用于更改现有类型名称(包括Typedef名称)的含义。一旦声明,typedef名称只能重新声明为再次引用同一类型。Typedef名称仅在其可见的范围内有效:不同的函数或类声明可以定义具有不同含义的同名类型。


用于链接的typedef名称

形式上,如果typedef声明定义了一个未命名的类(class)或枚举(enum),那么声明这个声明的第一个typedef名称将被用来表示类类型或枚举类型,仅用于链接目的。例如,在typedef struct {/*....*/} S;中,S是用于链接的typedef名称。以这种方式定义的类或枚举类型具有外部链接(除非它位于未命名的命名空间中)。

以这种方式定义的未命名类应该只包含C兼容的构造。尤其是,它不能:

  • 声明非静态数据成员、成员枚举或成员类以外的任何成员
  • 具有任何基类或默认成员初始值设定项
  • 包含lambda表达式

所有成员类也必须满足这些要求(递归地)。


注意

type alias使用不同的语法提供与typedef相同的功能,并且也适用于模板名称。


例子

// 最简单的typedef使用
typedef unsigned long ulong;// 如下的两个对象具有相同的类型
unsigned long l1;
ulong l2;// 以下定义了更复杂的类型
typedef int int_t, *intp_t, (&fp)(int, ulong), arr_t[10];// 下列两个对象具有相同的类型
int a1[10];
arr_t a2;// C语言中通常使用的避免写“struct S”的方式
typedef struct {int a; int b;} S, *pS;// 以下两个对象具有相同的类型
pS ps1;
S* ps2;// 下面的语句会报错,因为存储类说明符(storage-class-specifier)static不能在typedef声明中出现
// typedef static unsigned int uint;// typedef可以在声明语句的任何位置出现
long unsigned typedef int long ullong;
// 但是上述的语句我们通常的使用方法是"typedef unsigned long long int ullong;"// std::add_const, like many other metafunctions, use member typedefs
template< class T>
struct add_const {typedef const T type;
};typedef struct Node {struct listNode* next; // declares a new (incomplete) struct type named listNode
} listNode; // error: conflicts with the previously declared struct name

官方文档

C++中typedef用法说明相关推荐

  1. 关于C++中函数指针的使用(包含对typedef用法的讨论)

    关于C++中函数指针的使用(包含对typedef用法的讨论) (一)简单的函数指针的应用. //形式1:返回类型(*函数名)(参数表) char (*pFun)(int); char glFun(in ...

  2. C和C++中struct的typedef用法建议

    C和C++中struct的typedef用法建议 参考文章(建议先读) 根据参考的文章,总结一下: 情况1 C语言中: typedef struct{ ···: }aaa; 则aaa是struct类的 ...

  3. typedef用法小结

    Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法.不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮 ...

  4. C及C++中typedef的简单使用指南

    C及C++中typedef的简单使用指南 又是在学数据结构的时候,发现了之前学习的知识遗忘很多,在发现对C/C++中关键字typedef的理解还是没有到位后,我翻阅了学C++用到的课本,又问了度娘,也 ...

  5. c/c++中typedef与函数指针

    读linux代码时,常常见到形如 typedef void (*irq_flow_handler_t)(unsigned int irq, struct irq_desc *desc); 的代码. 这 ...

  6. typedef用法(1)

    Typedef 声明有助于创建平台无关类型,甚至能隐藏复杂和难以理解的语法.不管怎样,使用 typedef 能为代码带来意想不到的好处,通过本文你可以学习用 typedef 避免缺欠,从而使代码更健壮 ...

  7. Visul C++中CList用法

    Visul C++中CList用法 MFC 的CList,CPtrList,CObList,CStringList ,使用方法相类似. 初学mfc者,往往对CList等mfc的Collect类的使用感 ...

  8. typedef 用法详解

    第一部分 基本概念 1.基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等). 在编程 ...

  9. 模板编程中typename用法

    模板编程中typename用法 文章目录 模板编程中typename用法 typename的常规用法 typename的第二个用法:修饰类型 typename使用规则 typename的常规用法 ty ...

  10. c++中define用法

    c++中define用法 define在c++语言中用法比较多,这里对其进行整理. 1.无参宏定义 无参宏的宏名后不带参数. 其定义的一般形式为: #define  标识符  字符串 1 其中的&qu ...

最新文章

  1. 以杨辉三角形的三种实现体会python的编程特性
  2. 汇编和python-Python入门你要懂哪些?这篇文章总算讲清楚了
  3. python项目开发案例-Python项目开发案例集锦 PDF 全彩超清版
  4. iOS UItextView监听输入特定字符跳转页面选择选项返回
  5. CSS之background-origin属性
  6. 【转】容器 C++ set和map
  7. 可观测性平台下的低代码技术实践
  8. 软件项目管理第4版课后习题[附解析]第七章
  9. 基于Java+MySQL的GPS定位学生在线人脸考勤签到系统
  10. twitter跳过手机验证_安卓怎么注册推特账号(twitter跳过手机验证)
  11. 用友U9 UAP平台解析
  12. linux服务器被攻击怎么办
  13. Quartus | FPGA开发工具(Inter系列芯片)
  14. PHP乱码问题,UTF-8(乱码)
  15. go http post请求
  16. get_transform is not allowed to be called from a MonoBehaviour constructor (or instance field initia
  17. 3DMatch数据集
  18. 互联网江湖录3——武当阿里
  19. 《Activiti/Flowable 深入BPM工作流》---工作流中的网关有哪些?
  20. chrome浏览器如何录屏

热门文章

  1. JavaSE 简单介绍
  2. 【汇编程序】实现1-100求和(使用LOOP循环)
  3. Server、Workstation服务无法启动(导致无法访问共享)
  4. PuTTY用户手册(一)
  5. 基于微信小程序的图书馆管理系统.rar(论文+源码)
  6. android 画图 工具下载,画板画图软件下载-画板画图 安卓版v1.1.0-PC6安卓网
  7. 三年不重装:令电脑百毒不侵的13个妙招
  8. java中的加加++的疑惑?
  9. ceentos7修改成中文界面
  10. html在线客服,网页在线客服代码_jQuery QQ客服