0
点赞
收藏
分享

微信扫一扫

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

哈哈镜6567 2022-02-19 阅读 168

先来说结论:

        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和宏定义的区别我的理解如上文章所示,有错误的地方还请大家指出,共同学习,共同进步!

举报

相关推荐

0 条评论