#define和const的区别

     

目录

#define

const

1. const修饰变量

2. const修饰指针

3. const关键字的作用

#define 和 const之间的区别

1. 定义常量

 2. 起作用阶段

3. 调试

4. 安全性检查

5. 定义范围

6. 作用域


        在讲#defineconst之前我们先来看一下下面的代码吧:

#include<iostream>
#include<string>

#define Serven_define "三贝勒文子是个帅哥"

const std::string Serven_const = "三贝勒文子是帅哥";

        这段代码里面定义了两个常量,分别是 Serven_define Serven_const,这两个常量的内容都为 “三贝勒文子是帅哥”,在下面的代码运行过程中,凡是使用Serven_define和Serven_const都代表 “三贝勒文子是帅哥”,并且在整个程序的生命周期内都是不能更改的,但是这两者的区别就是Serven_define是被#define定义的,而Serven_const是被const修饰的,两者都是常量。这两者在代码面上的区别就是#define定义的标识符前面没有具体的常量类型(e.g.: string)。而const修饰常量需要在常量之前加上类型,而且在语句后面还要加上分号表示语句的结尾。因为const只是起到修饰的作用。

#define

        #define成为宏定义,在他的头部带着一个帽子 ‘#’,你是否想起了#include,是的,它们可以算是同一个家族,凡是带着这种帽子 ‘#’ 都是在代码编译阶段中的预处理过程进行的。

#define 标识符 常量

        也就是说,宏定义是在预处理过程中将代码中所有的标识符替换成后面的常量了,只是作简单的替换,不会去检查验证后面的常量是否正常(有可能会导致边界效应),其次,在程序运行的整个声明周期里,不能对该标识符进行调试。最重要的是,宏定义不占据数据内存空间,它是占用代码段空间。

        #define可以用来防止头文件重复引用的问题。

const

const 类型 标识符 = 常量;

        const是一个关键字,const常量是在编译和运行期间起作用,而且用const修饰的常量是需要有类型说明的(像int,string等类型)。并且常量定义后在运行期间是不能再进行修改的,const可以修饰变量、参数、返回值、指针、引用、成员变量、成员函数。在修饰指针是还可以引出了指针常量、常量指针和常量指针常量 这个可以看我之前整理的一篇文章。

1. const修饰变量

修饰变量serven,两种写法都可以接受

const int serven;
int const serven;

2. const修饰指针

修饰指针是可以为指针常量、常量指针、常量指针常量

int* const serven;
const int* serven;
const int* const serven;

3. const关键字的作用

阻止一个变量被改变,将该变量定义成常量后,后面的程序不能再修改该常量了,保证了安全性;

const可以修饰形参,修饰的形参再局部函数里面只能是可读形式,不能修改它;

const修饰类中的成员函数后,该成员函数就变成常成员函数了,不能去修改成员变量了,但是可与修改常成员变量;

const修饰对象就成为了常对象。常对象只能调用类的const成员函数了,但是类的成员变量的访问不限制,不能通过其修改。

#define 和 const之间的区别

1. 定义常量

#define 宏定义不带类型,const 是个关键字,主要起到修饰的作用,还是需要有定义常量的类型。

 2. 起作用阶段

#define 是在预处理阶段,将代码中的标识符全部替换成常量, const 是在整个程序的编译和运行期间都存在。

3. 调试

 因为 #define 标识符在预处理阶段就已经被替换了,所以在程序调试期间该标识符是不可调的。 const在运行期间都存在,所以在Debug下是可调试的。

4. 安全性检查

#define 只是简单的做替换,他可能会导致边界效应,const 只是修饰作用,常量还是有类型的,会做到安全性的检查。

5. 定义范围

6. 作用域

#define的作用域是整个程序,或者是从#define开始,到#undef结束,const作用域是整个程序的生命周期。

评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三贝勒文子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值