const用法总结

本文详细介绍了C++中const关键字的用法,包括修饰变量(常量、常量指针、指针常量)、修饰函数(参数、返回值、成员函数)以及修饰类(成员变量、成员函数)。强调const在不同场景下的意义,如类型安全、防止意外修改等。同时,还探讨了const引用、const_cast转换、volatile关键字以及mutable的使用,提供了深入理解C++中const特性的全面视角。
摘要由CSDN通过智能技术生成
先用一个比较接近的词来描述关键字const的含义:“只读”。
以下从修饰变量、函数、类三个角度进行分析与总结。

***************************************************
修饰变量:
1)const一般变量:
const int value = 10;
这是“C Primer Plus”中讲到的三种创建符号常量方法之一,另外两种是宏定义和枚举。
define宏定义的符号常量是明显常量,在编译时会直接用实际的值代替,在程序运行时所有的替代都已经完成。

作为常量限定符,const相比于#define的优点在于:
a.能够明确指定类型,可用于复杂/自定义的数据类型
b.有了第一条,const可以做类型安全检查,而宏定义不行
c.可将定义限定在特定的函数内或文件中
d.可以对const常量进行调试(实实在在的变量),不能对宏进行调试

在C++中,通常,定义一个const值来表示数组元素个数是个好方法,在后面声明数组和引用数组长度时可以使用该const值,替代原来C语言中宏定义的方法。

2)修饰于指针的特殊情况:两种区别通过“const后面的不能修改”来理解
a.常量指针(常指针):
int* const p = &a;
同上面一样,定义时必须赋初值,变量p的值不能修改,即定义后不能指向其他变量,但a可以是可修改的;

b.指针常量:
int a=2,b;
const int *p2;
p2 = &a;
//*p2 = 20;
a = 20;
p2 = &b;
指针所保存的地址可以改变,但指针所指向的值却不可以通过该指针改变。当添加*p2 = 20时,会发生编译错误!(*p2 不能修改
上面a不是常量,可以修改;p2是可以指向其他变量的。

这种用法是很常见的,其微妙之处在于指针只用来取值,不用来修改常将这种方法用于向函数传递数组、字符串、类对象等参数。

c.当然了,还可以有:
int a = 0;
const int * const p = &a;;
p是指向常量的常指针,即不能修改p的值,也不能通过p修改值,很好理解,没什么必要记。

3)const修饰全局变量
这个也是需要提一下的。
C语言中:外部链接,存放在只读数据段(.rdata)
C++中:内部链接,它可以被编译器放到符号表中作为编译期常量,(注意“可以”两个字,在该符号出现的某些地方,直接用常量代替),默认是不会进入导出符号表。

因此,在C++中,const会改变全局变量默认的作用域,使其仅在文件内有效;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值