【C++】typedfe和宏定义的区别

先来说结论:

        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;

所以显示为常性的是p

 下面来看宏定义:

#define SINT int*

int main()
{
	int a = 10, b = 20;
	const SINT p = &a;
	*p = 100;
	p = &b;
}

我们会看到*p = 100;这句代码会报错:“表达式必须是可修改的左值”,原因是我们在的宏定义在预编译阶段就已经被替换掉了,也就是一直都是const int * p = &a;const修饰的一直都是*这个指向,所以我们的指向不可改变,因此我们的*p = 100会报错,而我们的指针本身p在上述代码中不具备常性,所以p = &b代码可以通过

 

关于typedef和宏定义的区别我的理解如上文章所示,有错误的地方还请大家指出,共同学习,共同进步!

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值