typedef的底层是不是还是由宏安装的
既然是的那为何typedef前面不用加#,感觉它和宏的区别不大 宏的话就是字符串替换,处理宏的时机其实是真正编译之前。而typedef这个肯定是编译过程中处理的宏主要是用于给常量/变量一个明确的语义,或者单纯为了减少重复代码,还有条件编译,打印日志啥的,用处杂一点;宏可以写的很高级
typedef这个就纯粹为了定义类型了 本帖最后由 系统消息 于 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;
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;
typedef T (*ptype);
typedef T (&rtype);
};
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数组的引用。
页:
[1]