C++程序设计——四

实验目的

掌握C++中const关键字的使用

实验内容

在C++中,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。
const关键字的使用将大大提高程序的健壮性。

1、const定义常量

在这里插入图片描述

2、使用const而非宏常量,便于进行类型安全检查

因为宏常量没有类型,而是在编译前即预编译阶段进行字符替换,没有类型安全检查,系统也不会为它分配内存;而使用const定义的常量则是一种标识符,会在编译前进行严格的类型检验,同时系统也会会常量分配内存
在这里插入图片描述
在上面这个例子中,第11行输出Pi,会在预编译阶段把Pi进行字符串替换,变为3.14
所以使用const而非宏常量会更加安全

3、在函数中使用,保护被修饰的东西,防止被意外修改

在这里插入图片描述
比如在上述函数中,把形参定义为const,那它就不能再被修改,增强程序的健壮性

4、节省空间,提高效率

相比宏常量,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中可以有着若干拷贝
如下:
#difine PI=3.14
const double pi=3.14

double x1=pi;//此时为pi分配内存,之后不再分配
double x2=PI;//编译期间进行宏替换,分配内存
double x3=pi;//不分配内存
double x4=PI;//再进行宏替换,再分配内存

此外,编译器通常不为普通const常量分配内存,而是将他们存储在符号表中,这使得它成为一个编译期间的常量,没有了存储与读内存的操作,提高了效率

5、指针使用const

int* const p1;

p1本身指向的地址不能改变
但对应内存单元上的值可以被改变,既可以通过改变a[1]的值也可以通过改变*p1的值,他们本质上是同一个值
在这里插入图片描述

const int* p1;

p1本身指向的值不能改变
但可以通过改变a[1]的值来改变p1指向的内存单元上的值
在这里插入图片描述
在这里插入图片描述

const int* const p1

p1本身的地址和它指向的值都不能改变,但是可以通过改变a[1]的值来改变它指向的值

函数参数为引用使用const

可以在函数参数为引用时使用const,这样既可以增加效率也可以避免被修改;

void function(const Class& Var); //引用参数在函数内不可以改变;
void function(const TYPE& Var); //引用参数在函数内为常量不可变;

这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,他禁止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本, 然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效.另外只有引用的const传递可以传递一个临时对象,因为临时对象都是const属性, 且是不可见的,他短时间存在一个局部域中,所以不能使用指针,只有引用的const传递能够捕捉到这个家伙.

类相关const

通过const修饰类的成员变量:那么这个成员变量只能在类中被初始化,之后不能被修改;
通过const修饰成员函数:那么这个成员函数只能被const类对象调用,而且这个const类对象不能调用普通成员函数;const成员函数不能修改类的成员变量

将const类型转换为非const

采用const_cast 进行转换。
用法:
const_cast<类型> (expression)
非必要情况不要使用

实验总结

要理解const的概念,学会使用const关键字来提高程序的安全性和效率,但也不能盲目使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值