C++关键字const和mutable

news/2024/7/4 15:45:07

1. const

const是constant的缩写,意为常用,它有以下几个作用

1.1. 修饰变量

1.1.1. const修饰普通变量

const int a = 10;

const修饰了int,表示这段代码定义的变量,最后取的是int型且值为10,不可被后面的代码修改。

int const a = 10;

const修饰了变量a,表示这段代码定义的变量,最后取的值是int型且为10,不可被后面的代码修改。

1.1.2. const修饰指针变量

const修饰int,表示指针指向的对象为常量,*p1所指向的对象值不能通过*p1来修改,但是可以给p1重新赋值,使其指向不同的对象。

int a = 10;
int b = 9;
const int* p1 = &a;
p1 = &b;//正确,给p1重新赋值,使其指向不同的对象int a = 10;
int b = 9;
const int* p1 = &a;
*p1 = b;//错误,*p1所指向的a的值不能通过*p修改

const修饰int,表示指针所指向的内容为常量

int a = 10;
int b = 9;
int const* p1 = &a;
*p1 = 10;//错误
*p1 = 19;//错误int a = 10;
int b = 9;
int const* p1 = &a;
p1 = &b;//正确

1.2. 修饰函数

在类中将成员函数修饰为const表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数。为什么不能调用非const函数?因为非const函数可能修改数据成员,const不能修改数据成员,所以const成员函数内只能调用const函数。

2. mutalbe

mutable关键字,故名思意,是可变的、易变的之意。该关键字修饰的变量更容易被改变,可以被const函数改动。

在类中,const成员函数一般情况下不能修改成员变量,但它可以修改mutable修饰的成员变量x

#include <iostream>
using namespace std;class A {
public:void fun() const {x = 1; // 编译不过y = 1; // 可编译,可执行}private:int x;mutable int y;
};int main() {A a;a.fun();return 0;
}

参考文献

C语言关键字const详解_little train的博客-CSDN博客_赋值const代码什么意思


http://lihuaxi.xjx100.cn/news/246272.html

相关文章

Python机器学习实践指南pdf (中文版带书签)、原书代码、数据集

Python机器学习实践指南 目 录 第1章Python机器学习的生态系统 1 1&#xff0e;1 数据科学/机器学习的工作 流程 2 1&#xff0e;1&#xff0e;1 获取 2 1&#xff0e;1&#xff0e;2 检查和探索 2 1&#xff0e;1&#xff0e;3 清理和准备 3 1&#xff0e;1&#xff0e;4 建模…

jquery autocomplete实现solr查询字段自动填充并执行查询

2019独角兽企业重金招聘Python工程师标准>>> 页面引入三个JS&#xff1a; <script type"text/javascript" src"js/jquery-1.7.2.js"></script> <script type"text/javascript" src"js/jquery-ui.js">&l…

几种开源工作流引擎的简单比较(转)

摘要&#xff1a;目前开源工作流引擎用的最多的是jbpm &#xff0c; 各种特性都不错&#xff0c; 文档也比较多&#xff0c; 下面只简单列举一下目前开源工作流引擎用的最多的是jbpm &#xff0c; 各种特性都不错&#xff0c; 文档也比较多&#xff0c; 下面只简单列举一下 其他…

Ubuntu系统下制作USB启动盘

在Linux系统下制作系统启动盘有两种方法&#xff1a; 用dd命令用Linux自带的图形界面工具 Startup Disk Creator 1. dd命令 查看挂载的U盘的设备名称 sudo fdisk -l如果U盘还在挂载状态&#xff0c;卸载它。否则&#xff0c;会提示设备或资源正忙。 umount /dev/u盘名格式化…

爆款AR游戏如何打造?网易杨鹏以《悠梦》为例详解前沿技术

7月31日&#xff0c;2018云创大会游戏论坛在杭州国际博览中心103B圆满举行。本场游戏论坛聚焦探讨了可能对游戏行业发展有重大推动的新技术、新实践&#xff0c;如AR、区块链、安全、大数据等。网易AR游戏生态合作负责人杨鹏表示&#xff0c;传统游戏模式趋同&#xff0c;AR游戏…

nexus 4 下 DualBootInstallation 安装 ubuntu touch

最近折腾ubuntu for phone ubuntu也算是雷声大雨点小&#xff0c;从edge手机开始&#xff0c;到说兼容一大部分谷歌机&#xff0c;到现在缩水说只适配nexus 4 节操掉了一地啊&#xff0c;对付这种情况&#xff0c;ubuntu touch也就可以只装着玩玩了&#xff0c;还好ubuntu 官方…

C++关键字volatile

1. 介绍 Volatile&#xff0c;词典上的解释为&#xff1a;易失的&#xff1b;易变的&#xff1b;易挥发的。那么用这个关键词修饰的C/C变量&#xff0c;应该也能够体现出”易变”的特征。大部分人认识Volatile&#xff0c;也是从这个特征出发。volatile提醒编译器它后面所定义…

谈谈最近独立做项目的一些事情,一些小经验,分享之!

可以说我是一个码农&#xff0c;一个纯正的码农&#xff0c;一个脱离了低级趣味的码农&#xff0c;时刻准备着要做一个对社会有贡献的码农。 平常最喜欢的事情就是在群里问问题&#xff0c;总是有那么一群好哥们在一起&#xff0c;这样可以享受装逼的乐趣。 谈了这么多无厘头的…