- UID
- 4293
- 精华
- 积分
- 11130
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
发表于 2022-6-14 19:11:31
|
显示全部楼层
本帖最后由 系统消息 于 2022-7-4 23:35 编辑
裆燃不是啊,typedef和#define的区别可大了:
- #define PINT1 int *
- typedef int *PINT2;
- // 以下4个变量,其中 pi12 是 int 类型,其它3个均为 int * 类型。
- PINT1 pi11, pi12;
- PINT2 pi21, pi22;
复制代码
typedef 可以实现给数组类型和函数类型取别名,而#define不行。
- typedef int ARRTYPE[233];
- ARRTYPE arr; // arr 为 233 个 int 长度的数组
- typedef 返回值 调用约定 函数类型别名(参数声明);
- 函数类型别名 函数名; // 这是声明一个函数,其原型由typedef定义。
- 函数类型别名 *函数指针 = &函数名; // 这是定义一个函数指针变量。
- 函数类型别名 &函数引用 = 函数名; // 这是函数引用。
复制代码
还有 typedef 有作用域,#define 没有:
- typedef 类型 全局作用域别名;
- namespace 命名空间
- {
- typedef 类型 命名空间作用域别名;
- class 类名
- {
- public:
- typedef 类型 类成员作用域别名;
- private:
- typedef 类型 类私有作用域别名;
- };
- 返回类型 函数名(参数列表)
- {
- typedef 类型 函数菊部作用域别名;
- if (条件)
- {
- typedef 类型 菊部子作用域别名;
- }
- return 返回值;
- }
- }
复制代码
typedef 还有更强大的用法(与模板结合使用):
- template <typename T, size_t S = 0>
- struct XXX
- {
- typedef T type[S];
- typedef T (*ptype)[S];
- typedef T (&rtype)[S];
- };
- template <typename T>
- struct XXX<T, 0>
- {
- typedef T type;
- typedef T *ptype;
- typedef T &rtype;
- };
- XXX<int, 666>::type xx1, xx2; // xx1 和 xx2 都是 长度为666的int数组。
- XXX<int, 666>::ptype pxx1 = &xx1, pxx2 = &xx2; // pxx1 和 pxx2 都是 长度为666的int数组的指针。
- XXX<int, 666>::rtype pxx1 = xx1, pxx2 = xx2; // pxx1 和 pxx2 都是 长度为666的int数组的引用。
复制代码 |
|