首页 > 其他分享 >const修饰成员函数

const修饰成员函数

时间:2023-02-12 15:33:17浏览次数:37  
标签:const 函数 成员 关键字 修饰 mutable

const修饰成员函数

在类的成员函数后面加const关键字,表示在成员函数中保证不会修改调用对象的成员变量。

注意:

1)mutable可以突破const的限制,被mutable修饰的成员变量,将永远处于可变的状态,在const修饰的函数中,mutable成员也可以被修改。

2)非const成员函数可以调用const成员函数和非const成员函数。

3)const成员函数不能调用非const成员函数。

4)非const对象可以调用const修饰的成员函数和非const修饰的成员函数。

5)const对象只能调用const修饰的成员函数,不能调用非cosnt修饰的成员函数。

这里出现了令人纠结的三个问题:

1、为什么要保护类的成员变量不被修改?

2、为什么用const保护了成员变量,还要再定义一个mutable关键字来突破const的封锁线?

3、到底有没有必要使用const和mutable这两个关键字?

保护类的成员变量不在成员函数中被修改,是为了保证模型的逻辑正确,通过用const关键字来避免在函数中错误的修改了类对象的状态。并且在所有使用该成员函数的地方都可以更准确的预测到使用该成员函数的带来的影响。而mutable则是为了能突破const的封锁线,让类的一些次要的或者是辅助性的成员变量随时可以被更改。没有使用const和mutable关键字当然没有错,const和mutable 关键字只是给了建模工具更多的设计约束和设计灵活性,而且程序员也可以把更多的逻辑检查问题交给编译器和建模工具去做,从而减轻程序员的负担。

标签:const,函数,成员,关键字,修饰,mutable
From: https://www.cnblogs.com/tgfoven/p/17113874.html

相关文章

  • 拷贝构造函数
    拷贝构造函数用一个已存在的对象创建新的对象,不会调用(普通)构造函数,而是调用拷贝构造函数。如果类中没有定义拷贝构造函数,编译器将提供一个拷贝构造函数,它的功能是把已存......
  • Clion在一个cmake项目中运行多个main函数
    #遍历项目根目录下所有的.cpp文件file(GLOBfiles*.cpp*/*.cpp)foreach(file${files})string(REGEXREPLACE".+/(.+)\\..*""\\1"exe${file})add_e......
  • C语言学习:几个常见的内存操作函数
     #include<io_utils.h>#include<string.h>#include<stdlib.h>intmain(){//memchr()//strchr()//memcmp()//strcmp()//memset()char*mem......
  • 「解题报告」[省选联考 2021 A/B 卷] 图函数
    我不会最短路了?显然每对点能对答案造成的贡献是一个前缀,考虑求出每对点能造成贡献的最大时间。首先能发现,如果\(v>v'\),那么假如\(v\tov'\tou\),那么\(v'\tou\)......
  • 构造函数与析构函数
    构造函数和析构函数构造函数:在创建对象时,自动的进行初始化工作。析构函数:在销毁对象前,自动的完成清理工作。1)构造函数语法:类名()l访问权限必须是public。l函数名必......
  • 《Terraform 101 从入门到实践》 Functions函数
    《Terraform101从入门到实践》这本小册在南瓜慢说官方网站和GitHub两个地方同步更新,书中的示例代码也是放在GitHub上,方便大家参考查看。Terraform的函数Terraform为......
  • 内联函数
    内联函数C++将内联函数的代码组合到程序中,可以提高程序运行的速度。语法:在函数声明和定义前加上关键字inline。通常的做法是将函数声明和定义写在一起。注意:l内联函......
  • android开发kotlin顶级函数和拓展函数的实现原理
    android开发kotlin顶级函数和拓展函数的实现原理//我们编写的源代码在MainActivity.kt下面,如下:funtopTest(){print("123")}funMainActivity.extTest(){pr......
  • 字符串常用函数
    供自己查询使用,随时补充常用函数切片#[start:end:step]左闭右开[start,end)s="Helloword"print(s[1:5])#ello默认step=1print(s[6:])#word[satrt-......
  • C++匿名函数
    #include<iostream>std::stringaaa="111";intmain(){//[]称为lambda捕获列表,它的含义为:告诉编译器需要在匿名函数内部使用外部的变量。捕获列表中的内容......