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修饰类的成员函数 的相关文章

  • 指针常量与常量指针的区别、const 数组

    指针常量与常量指针 const 数组 一 指针常量指针本身是常量 二 常量指针指向常量的指针 三 实例四 const 数组 一 指针常量 指针本身是常量 span class token comment 指针本身不能被修改 span spa
  • 安装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 次
  • CUJ:标准库:定义iterator和const iterator

    The Standard Librarian Defining Iterators and Const Iterators Matt Austern http www cuj com experts 1901 austern htm top
  • c# 常量(const) 使用的注意事项

    在我们编码的过程 xff0c const 是我们经常用到的一种声明类型 xff0c 如果不了解const的运行机制 xff0c 有时候会发生一些莫名其妙的bug 可能让我们掉入深坑中 接下来我们一起看看常量的应用吧 xff01 1 常量默认
  • warning:initialization discards ‘const’ qualifier from pointer target type 解决方法

    initialization discards const qualifier from pointer target type 意思是 xff0c 初始化时丢掉了 xff08 目标类型的 xff09 const 限定符 eg const
  • Visual Studio解决const char *与LPCWSTR 不兼容

    项目 gt 属性 gt 配置属性 gt 高级 xff0c 将字符集改为未设置
  • #define和const的区别

    这个区别用从几个角度来说 xff1a 角度1 xff1a 就定义常量说的话 xff1a const 定义的常数是变量 也带类型 xff0c define 定义的只是个常数 不带类型 角度2 xff1a 就起作用的阶段而言 xff1a def
  • C和C++的const

    1 C语言的const修饰的变量都有空间 xff0c 全局的在常量区 xff0c 局部的在栈区 xff1b 2 C语言的const修饰的全局变量具有外部链接属性 xff0c extern const int a xff1b 即可使用 xff
  • 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#中的readonly与const区别

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

    Effective C 43 43 里面说 xff0c 尽量使用const xff0c const修饰变量一般有两种方式 xff1a const T a xff0c 或者 T const a xff0c 这两者都是一样的 xff0c 主要看
  • C语言中的关键字应用技巧(volatile、const、struct/union、_ _预定义_ _、#/##、void/void*、weak)

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

    一 define是预处理指令 xff08 pre processor directive xff09 而const是关键字 define用于给一些值定义名称 字符串 xff0c 这样定义的字符串在C C 43 43 中称为宏定义 xff0c
  • const 与重载

    const到底是不是一个重载的参考对象 xff0c 请看下面的例子 class A public void f int i std cout lt lt 34 1 34 函数1 void f int i const std cout lt
  • C语言--符号常量

    在C语言中 可以用一个标识符来表示一个常量 称之为符号常量 其特点是编译后写在代码区 不可寻址 不可更改 属于指令的一部分 一 符号常量定义用 define 符号常量在使用之前必须先定义 其一般形式为 形式为 define 标识符 常量 e
  • 【转】C++类(Class)总结,经典易懂

    C 类 Class 总结 一 C 类的定义 C 中使用关键字 class 来定义类 其基本形式如下 class 类名 public 行为或属性 protected 行为或属性 private 行为或属性 示例 定义一个点 Point 类 具
  • var与ES6中const、let声明的变量的区别

    好久以前的研究 今天再来回顾一下 首先我们比较一下使用var声明的变量和不使用var声明的变量的区别 使用var声明的变量声明前调用 那么该变量的值为undefined 不使用var声明的变量声明前调用直接报错Uncaught Refere

随机推荐

  • 线程的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 主要看