先来说结论:
1.宏定义作用于编译之前(也就是预编译阶段,而typedef作用于编译阶段
2.typedef仅限于类型的重定义,而宏定义不仅可以为类型起别名还可以为数值定义起别名(简单的替换)
下面来看一下区别
下面这是typedef的用法
typedef int* PINT;
int main()
{
int a = 10, b = 20;
const PINT p = &a;
*p = 100;
p = &b;
}
我们会看到p = &b这行代码会报错:“表达式必须是可修改的左值”,为什么会这样呢,原因是PINT等价于int* 但是使用typedef的话,int*在编译阶段是个整体,也就是说const修饰的是int*这个整体,而我们知道int*这个整体是个指针类型,也就是指针显常性,就是我们的p显示为常性(因为我们的p是个指针,const修饰的是指针),无法修饰到指向为常性,所以我们可以修改到它的指向,而*p指向不为常性,本身我们*p = 10,所以我们可以对*p进行修改
const PINT p = &a;
所以显示为常性的是

本文探讨了C++中typedef和宏定义的主要区别。typedef在编译阶段用于类型重定义,只适用于类型别名,而宏定义在预编译阶段作用,可以为类型和数值创建别名。在示例中,通过typedef定义的常量指针p不允许修改其指向,但允许修改所指数值;而宏定义的常量指针在预编译时已替换,使得指向不可修改,导致赋值操作失败。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



