C++ define、typdef和const

C++ define、typdef和const

1、 typdef与define
typdef与define都是替一个对象取一个别名,以此来增强程序的可读性,但是它们在使用和作用上有几点不同:
(1)原理不同
     #define是c语言中定义的语法,它是预处理指令,在预处理时进行简单而机械的字符串替换,不做正确性检查,不管含义是否正确照样带入,只有在编译已被展开的源程序时才会发现可能的错误并报错。
     typdef是关键字,它在编译时处理,所以typdef有类型检查的功能它在自己的作用域内给一个已经存在的类型一个别名,但是不能在一个函数定义里面使用标识符typdef
(2) 功能不同
     typdef用来定义类型的别名,这些类型不止包含内部类型(int、double、char等),还包括自定义类型(如struct),可以起到使类型易于记忆的功能。
     #define不只是可以为类型取别名,还可以定义常量、变量、编译开关等。
(3)作用域不同
     #define没有作用域的限制,只要是之前预定义过的宏,在以后的程序中都可以使用,而typdef有自己的作用域。
void fun()
{
     #define A int;
}
void gun()
{
     //在这里也可以使用A,因为宏替换没有作用域,但如果上面使用的是typdef,那这里就不能用A,不过一般不在函数内使用typdef 
}

(4)对指针的操作不同
两者修饰指针类型时,作用不同
#define INTPTR1 int*;
typedef int* INTPTR2;
INTPTR1 p1,p2;
INTPTR2 p3,p4;
INTPTR1 p1,p2;和INTPTR2 p3,p4;这两句的效果截然不同。INTPTR1 p1,p2进行字符串替换后变成int* p1,p2,要表达的意义是声明一个指针变量p1和一个整型变量p2。而INTPTR2 p3,p4,,由于INTPTR2是具有含义的,告诉我们是一个指向整型数据的指针,那么p3和p4都为指针变量,这句相当于int *p1,*p2.从这里可以看出,进行宏替换是不含任何意义的替换,仅仅为字符串替换;而用typedef为一种数据类型起的别名,是带有一定含义的。

2、const与define
C++中const和define都可以定义常量,效果虽然一样,但是各有侧重,define既可以替代常数值,又可以替代表达式,甚至是代码段,但是容易出错,而const的引入可以增强程序的可读性,使得程序的维护与调试变得更加方便。具体而言,它们有几下几个不同之处:
(1)define只用来进行单纯的文本替换,define常量的生命周期置于编译期,不分配内存空间,它存在于程序的代码段,实际程序中它只是一个常数,一个命令中的参数没有实际的存在;而const常量存在于程序的数据段,并在堆栈中分配内存空间,const常量在程序中确确实实地存在,并且可以被调用、传递。
(2)const常量有数据类型,而define常量没有数据类型。编译器可以对const常量进行类型安全检查,如类型、语句结构等,而define不行。
(3)很多IDE支持调试const常量,而不支持define定义的常量。

总结:由于const修饰的变量可以排除程序之间的不安全性因素,保护程序中的常量不被修改,而且对数据类型也会进行相应的检查,极大地提高了程序的健壮性,所以一般更倾向于用const定义常量类型。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值