C++小知识——const详解示例(修饰变量、指针、引用和成员函数)

本文详细介绍了C++中const关键字的使用,包括const修饰变量、指针、引用和成员函数的不同情况,探讨了const与#define的区别,并通过实例解析了const在不同场景下的应用,帮助开发者更好地理解和利用const特性。

一、const的基本使用情况

使用情况格式
常变量const 类型说明符 变量名 (可互换const和类型说明符)
常引用const 类型说明符 &引用名(可互换const和类型说明符)
常对象类名 const 对象名(可互换const和类型说明符)
常成员函数类名::函数名(形参表) const
常数组类型说明符 const 数组名[大小](可互换const和类型说明符)
常指针类型说明符 const *变量名

作用:

  1. 修饰变量:说明该变量的内容不可以被改变
  2. 修饰指针:分为指向常量的指针和常指针
  3. 修饰引用:常用于形参类型,既避免了拷贝,又避免了函数对值的修改
  4. 修饰成员函数:说明该成员函数不能修改成员变量

二、const修饰指针的情况

首先定义了一个整型变量b并给它赋值100

情况1:const位于*号的左侧,与const放在变量声明符中的位置无关

const int *a = &b;等价于int const *a = &b;
这种情况下,const就是用来修饰指针所指向的变量,即指针指向为常量
这样,可以先不进行初始化,因为虽然指针的内容是常量,但指针本身不是常量。const int *a;是正确的。

举个例子:假如a是一个仓库管理员,他所管理的仓库里面的货物他是没有权限去动的。
在这里插入图片描述
但是,也有两种办法去改变仓库里面的值:
最直接的当然是直接改变变量b的值了
在这里插入图片描述
间接的方法就是让a指向另外一个变量
在这里插入图片描述

情况2:const位于*号的右侧,const修饰指针本身,即指针本身是常量

int* const a;这种情况下不能对指针本身进行更改操作,而指针所指的内容不是常量
由于指针本身是常量,所以一定要在定义的同时进行初始化
在这里插入图片描述
在这里插入图片描述

情况3:星号的左右两侧都有,指针本身和指针指向的内容都是常量

const int* const a = &b;


三、与#define的区别

虽然它们都可以定义常量,但是const比#define有更多的优点:

  • const常量有数据类型,而宏常量没有数据类型。
    因此编译器可以对前者进行安全检查,而只对后者进行字符替换,而且在替换过程中可能有边际效应
  • 有些调试工具可以针对const进行调试,而不能对宏常量进行调试

四、如何修改常成员函数中类的成员变量

在类的成员变量中,用mutable修饰成员变量名后,就可以在const成员函数中修改成员变量的值了

五、一些例子

5.1 当const修饰指针

示例1:const char *const *p;
这是一个二级指针,可以看到const在*号的左边,于是这个二级指针指向的是一个常量,内容不可修改,但是二级指针本身可以修改。

示例2:const char const *p;
可以看到const在*号的左边,于是该指针指向的内容是常量,它是一个指向const char的指针

示例3:const char * const p;
可以看到const在*号的右边,于是它是一个常指针,指向const char

5.2 当const用于常对象成员

示例1:常对象成员只能在初始化列表赋值
在这里插入图片描述
注意:常量必须要在构造函数的初始化列表里面初始化或者将其设置为static
因此,正确的形式应当是:
在这里插入图片描述
或者
在这里插入图片描述

5.3 当const用于成员函数

示例1:此时可以用于区分重载函数,常对象只能调用常成员函数
在这里插入图片描述

5.4 当const用于函数参数和返回值

示例1:用于函数参数时
在这里插入图片描述

示例2:用于函数返回值时
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值