const修饰类的成员函数

2023-05-16

《Effective C++》里面说,尽量使用const,const修饰变量一般有两种方式:const T a,或者 T const *a,这两者都是一样的,主要看const位于的左边还是右边,这里不再赘述,主要来看一下当const修饰类的成员函数时,成员函数有什么特点。

类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。

在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 const。所以 const 关键字对成员函数的行为作了更加明确的限定:有 const 修饰的成员函数(指 const 放在函数参数表的后面,而不是在函数前面或者参数表内),只能读取数据成员,不能改变数据成员;没有 const 修饰的成员函数,对数据成员则是可读可写的。

除此之外,在类的成员函数后面加 const 还有什么好处呢?那就是常量(即 const)对象可以调用 const 成员函数,而不能调用非const修饰的函数。

注意:两个成员函数如果只是常量性不同,是可以被重载的
例如:

class A
{
public:
    void f()
    {
        cout<<"non const"<<endl;
     } 
    void f() const
    {
        cout<<" const"<<endl;
     } 
};

微软笔试第二题正是考这个,const 对象调用f() const,非const对象调用 f()

from:
http://blog.sina.com.cn/s/blog_628571e60101e0vb.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

const修饰类的成员函数 的相关文章

  • 安装spconv时遇到‘remove_const_t’ is not a member of ‘std’

    主要是由于cmake的版本太高或者太低 xff0c 导致编译错误 xff0c 将版本设置为3 14 4时 xff0c 再次编译没有再发生错误
  • C#中的readonly与const区别

    xfeff xfeff const 的概念就是一个包含不能修改的值的变量 常数表达式是在编译时可被完全计算的表达式 因此不能从一个变量中提取的值来初始化常量 如果 const int a 61 b 43 1 b是一个变量 xff0c 显然不
  • const

    const是一个限定符 xff0c 被const限定的变量其值不会被改变 目录 1 修饰变量 2 修饰指针 3 修饰引用 4 修饰成员函数 5 宏定义 define 和 const 常量 1 修饰变量 指向的变量的值不可改变 xff0c 次
  • c# 常量(const) 使用的注意事项

    在我们编码的过程 xff0c const 是我们经常用到的一种声明类型 xff0c 如果不了解const的运行机制 xff0c 有时候会发生一些莫名其妙的bug 可能让我们掉入深坑中 接下来我们一起看看常量的应用吧 xff01 1 常量默认
  • const成员函数

    const成员函数 const修饰的类成员函数称为const成员函数 xff0c const修饰类成员函数 xff0c 实际修饰该成员函数隐含的this指针 xff0c 表明在该成员函数中不能对类的任何成员进行修改 如下图所示 xff1a
  • Visual Studio解决const char *与LPCWSTR 不兼容

    项目 gt 属性 gt 配置属性 gt 高级 xff0c 将字符集改为未设置
  • 对‘cv::Mat::Mat()’未定义的引用,对‘cv::Mat::clone() const’未定义的引用

    报错如下 xff1a 解决办法 xff1a 在自己的可执行文件链接库的时候在后面加入opencv库即可 xff0c 即加入 OpenCV LIBS xff0c 如下图 xff1a add library sensor setup nodel
  • std::string、const char*、QString之间相互转换

    字符串转换 std string 转 const char std string str 61 34 string 34 const char cstr 61 str c str const char 转 std string span c
  • [原创][错误分析][Error] ‘stdios_baseios_base(const stdios_base&)‘ is private

    报错情况 在devc 43 43 中编写与C 43 43 类运算符重载时出现的了错误提示 编译器定位到的错误位置为ios base h下的 span class token keyword private span span class t
  • C++中的四种强制转换 dynamic_case,const_cast,static_case,reinterprer_case的不同

    使用标准C 43 43 的类型转换符 xff1a static cast dynamic cast reinterpret cast 和const cast 1 static cast 用法 xff1a static cast lt typ
  • C语言中的关键字应用技巧(volatile、const、struct/union、_ _预定义_ _、#/##、void/void*、weak)

    嵌入式C开发关键字的应用技巧 1 volatile volatile修饰表示变量是易变的 xff0c 编译器中的优化器在用到这个变量时必须每次都小心地从内存中重新读取这个变量的值 xff0c 而不是使用保存在寄存器里的备份 xff0c 有效
  • 顶层const和底层const

    概念解释 表示声明常量的const都是顶层const 用于声明引用的const都是底层const 顶层const是 xff1a 指针本身是常量 底层const是 xff1a 指针所指的对象是常量 即是顶层const又是底层const xff
  • C 语言中 const 与指针的结合使用

    请区分一下几种指针的区别 1 const int p 2 int const p 3 int const p 4 const int const p 5 const int const p 解析 xff1a 1 const int p 中
  • const与define的区别

    1 define是预编译指令 xff0c const是普通变量的定义 xff0c define定义的宏是在预处理阶段展开的 xff0c 而const定义的只读变量是在编译运行阶段使用的 2 const定义的是变量 xff0c 而define
  • C++中的const_interator

    当我们做出如下定义时 vector lt ID gt ids vector lt ID gt const iterator iter 并进行了下面的操作 xff0c 则是正确的 for iter 61 ids begin iter 61 i
  • C语言学习笔记->const和define区别

    1 define 是预编译指令 xff0c 而const 是普通变量的定义 define定义的宏是在预处理阶段展开的 xff0c 而const定义的只读变量在编译运行中使用 2 const定义的是变量 xff0c 而define定义的是常量
  • C++中#define和const的区别

    一 define是预处理指令 xff08 pre processor directive xff09 而const是关键字 define用于给一些值定义名称 字符串 xff0c 这样定义的字符串在C C 43 43 中称为宏定义 xff0c
  • ubuntu(15):对‘casadi::MX::MX(casadi::MX const&)’未定义的引用

    catkin build 编译报错 xff0c 找不到CASADI的头文件目录CASADI INCLUDE DIRS或者库文件也达不到CASADI LIBRARIES xff1b 对 casadi MX horzsplit casadi M
  • ES6中const的使用

    const声明一个只读的常量 一旦声明 常量的值就不能改变 且const一旦声明变量 就必须立即初始化 不能留到以后赋值 const的作用域与let命令相同 只在声明所在的块级作用域内有效 const命令声明的常量也是不提升 同样存在暂时性
  • 指针与const限定符

    const限定符和指针结合起来常见的情况有以下几种 const int a int const a 这两种写法是一样的 a是一个指向const int的指针 a所指向的内存单元不可改写 所以 a 是不允许的 但a可以改写 所以a 是允许的

随机推荐

  • 线程的sleep()方法的简单使用

    线程的sleep方法签名位 xff1a public static void sleep long millis throws InterruptException 是静态方法 xff0c 使目前正在执行的线程休眠millis毫秒 pack
  • 栈和堆的生长方向

    C 43 43 作为一款C语言的升级版本 xff0c 具有非常强大的功能 它不但能够支持各种程序设计风格 xff0c 而且还具有C语言的所有功能 我们在这里为大家介绍的是其中一个比较重要的内容 xff0c C 43 43 内存区域的基本介绍
  • mysql关于bit类型用法

    本文来源于 xff1a http www server110 com mysql 201403 7117 html Mysql关于bit类型的用法 xff1a 官方的资料如下 xff1a 9 1 5 位字段值 可以使用b 39 value
  • Ajax 简单购物车工程

    工程结构图 xff1a index jsp lt 64 page language 61 34 java 34 contentType 61 34 text html charset 61 utf 8 34 pageEncoding 61
  • Oracle scott账户被锁定,scott默认密码,sys,system默认密码

    oracle帐号scott被锁定如何解锁 具体操作步骤如下 xff1a C gt sqlplus 请输入用户名 xff1a sys 输入口令 xff1a sys as sysdba 注意 xff1a 在口令这里输入 的密码后面必须要跟上 a
  • Linux将输出放到文件中

    一 xff0c 如何把命令运行的结果保存到文件当中 这个问题太简单了 xff0c 大家都知道 xff0c 用 gt 把输出转向就可以了 例子 lhd 64 hongdi ls gt ls txt lhd 64 hongdi cat ls t
  • 理解interrupt()方法

    java interrupt 方法只是设置线程的中断标记 xff0c 当对处于阻塞状态的线程调用interrupt方法时 xff08 处于阻塞状态的线程是调用sleep wait join 的线程 xff0c 会抛出InterruptExc
  • 泛型二 泛型和数组

    数组和泛型容器有什么区别 要区分数组和泛型容器的功能 xff0c 这里先要理解三个概念 xff1a 协变性 xff08 covariance xff09 逆变性 xff08 contravariance xff09 和无关性 xff08 i
  • 浏览器缓存

    阅读目录 1 浏览器缓存基本认识 2 强缓存的原理 3 强缓存的管理 4 强缓存的应用 5 协商缓存的原理 6 协商缓存的管理 7 浏览器行为对缓存的影响 浏览器缓存 xff0c 也就是客户端缓存 xff0c 既是网页性能优化里面静态资源相
  • ubuntu有线无线一起连

    在做嵌入式开发 xff0c 有线连开发板 xff0c 无线上网 一直都是连了有线无线就掉线 设置如下 xff1a 对于开发板的有线网络 xff0c 在设置里选上Use this connection only for resources o
  • jstat用法

    jstat的用法 用以判断JVM是否存在内存问题呢 xff1f 如何判断JVM垃圾回收是否正常 xff1f 一般的top指令基本上满足不了这样的需求 xff0c 因为它主要监控的是总体的系统资源 xff0c 很难定位到java 应用程序 J
  • A warning - comparison between signed and unsigned integer expressions [-Wsign-compare]的解决方法

    源程序是 span style font size 14px 产生观测模型 void ProRobotics GenObservations float sd Generate observations 假设传感器能观察到机器人周围sd米内
  • QT调试时提示Signal name: SIGSEGV - Signal meaning: Segmentation Fault

    最初我在运行QT时 xff0c 点击某个功能的按钮时 xff0c 界面一下就消失了 我找到这个按钮相关的函数 xff0c 设置断点 xff0c 分步调试 xff1a 在下面这个程序处显示 xff1a Signal name SIGSEGV
  • ROS中的CMakeLists.txt

    在 ROS的编程过程中 xff0c 如果 CMakeLists txt如果写不好 xff0c 编译就很难成功 如果看不懂 CMakeLists txt那么很多错误你也不知道时什么回事 所以深入了解它是很右必要的 现在我们就来看看它 我们使用
  • ROS中QThread的使用(同时进行topic的订阅)

    最近在进行利用socket将一个topic上的位姿消息发送给UR5机器人的实验 由于socket时刻都处于接听的状态 xff0c 类似一个死循环 xff0c 另外由于只要接听的topic上一有消息来 xff0c 就会调用callback函数
  • 使用qtcreator时出现The specified source space &quot;/home/xxx/src&quot; does not exist的错误

    今天新安装了ubuntu xff0c ros和qtcreator xff0c 进行编译时出现 22 42 45 Starting 34 opt ros hydro bin catkin make 34 Base path home xxx
  • 串行通讯与并行通讯区别

    1 串行通讯 一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯 串行通讯的特点是 xff1a 数据位传送 xff0c 传按位顺序进行 xff0c 最少只需一根传输线即可完成 xff0c 成本低但送速度慢 串行通讯的距离可以从几米到几
  • Eigen的使用

    xff11 Eigen在ROS中的配置 xff1a 在CMakeLists txt中必须加上 xff1a find package Eigen REQUIRED span class hljs keyword span include di
  • Travis CI

    第一次使用Travis CI xff0c 下面说说他的使用 xff1a xff11 激活GitHub的代码库 一旦使用GitHub登陆Travis CI之后 xff0c 会自动从GitHub同步你的代码库 xff0e 点击你右上角的账户名
  • const修饰类的成员函数

    Effective C 43 43 里面说 xff0c 尽量使用const xff0c const修饰变量一般有两种方式 xff1a const T a xff0c 或者 T const a xff0c 这两者都是一样的 xff0c 主要看