在 C++ 中,const 关键字可以应用于成员函数,表示该函数不会修改对象的成员变量

const 出现在 operator->() 成员函数的末尾,这意味着该成员函数在调用时不会修改对象的任何成员变量

如下:

node* operator->() const { return p; }

1. const 的作用

  • const 关键字位于函数签名的末尾,表示这是一个常量成员函数
  • 常量成员函数的主要特性是:它不能修改类的任何非 mutable 的成员变量,并且只能调用类的其他 const 成员函数。

2. 为什么要加 const

加上 const 的目的是允许该成员函数在一个常量对象上被调用。例如,如果对象是 const,那么只能调用 const 成员函数。

如果你不加 const,在常量对象上调用该成员函数时会出现编译错误。

3. 若不加 const 的问题

如果你没有在 operator->() 的末尾加上 const,你将无法在常量对象上调用它:

const Wrapper w(&n);  // 常量对象

// 如果 operator->() 不是 const,下面这行代码会报错
std::cout << w->value << std::endl;

总结:

  • const 成员函数表示函数不会修改对象的成员变量,因此可以在 const 对象上调用。
  • operator->() 函数末尾加 const,允许你在 const 对象上使用箭头操作符来访问封装的指针。

    如果不加 const,在 const 对象上调用该函数时会报错。

const` 关键字位于函数签名的末尾的更多相关文章

  1. C语言学习及应用笔记之三:C语言const关键字及其使用

    在C语言程序中,const关键字也是经常会用到的一个关键字,那么使用const关键字的目的是什么呢?事实上,在程序中使用const关键字的主要目的就是为了向使用者传递设计者的一些意图. 事实上,无论我 ...

  2. C/C++中const关键字

    http://blog.csdn.net/xdrt81y/article/details/24333335 今天在做一个趋势笔试题的时候,才让我有了系统把const关键字好好总结一下的冲动,因为这个关 ...

  3. const关键字对C++成员函数的修饰

    const对C++成员函数的修饰分为三种:1. 修饰参数:2. 修饰返回值:3. 修饰this指针.简述一下知识点如下,以后找功夫再完善. 1. 对函数参数的修饰. 1)const只能用来修饰输入参数 ...

  4. 实习第一个月总结(const关键字、条件编译、volatile关键字、#和##的作用、函数指针)

    C语言中const关键字的作用: 修饰局部变量或者全局变量,表示变量n的值不能被改变了 修饰指针,分为常量指针与指针常量,也可以两者结合 常量指针指向的值不能改变,但是这并不是意味着指针本身不能改变, ...

  5. (转) C/C++中const关键字详解

    文章转自  http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维 ...

  6. const关键字祥解

    为什么使用const?采用符号常量写出的代码更容易维护:指针常常是边读边移动,而不是边写边移动:许多函数参数是只读不写的.const最常见用途是作为数组的界和switch分情况标号(也可以用枚举符代替 ...

  7. C++中const关键字的使用总结

    C++中使用const关键字来修饰常量,下面从两个方面总结:变量和成员函数. 变量:const可以修饰普通变量.指针(数组)和结构体. 1.const修饰普通变量是最简单的情形.这样的用法多为在程序中 ...

  8. C++中的const关键字

    http://blog.csdn.net/eric_jo/article/details/4138548 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方 ...

  9. const关键字详解

    const在函数前与函数后的区别 一   const基础         如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况:         int   b   =   500; ...

  10. c++ --> const关键字总结

    const关键字总结 C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性.const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变 ...

随机推荐

  1. vue项目使用elementUI的el-upload组件实现图片上传和文件上传的公共组件封装

    图片上传: <template> <div class="upload-pic"> <el-upload class="upload-dem ...

  2. SpringSecurity:hasAuthority与自定义权限校验

    springsecurity中有两种权限控制方法 1.基于注解 @PreAuthorize("hasAuthority('syst:add')") 他的作用是在controller ...

  3. 简单认识APP项目

    manifests:里面只有一个xml,是app运行配置文件 清单文件 <?xml version="1.0" encoding="utf-8"?> ...

  4. SEO初学者指南之什么是SEO

    前言 Hi,大家好,我是听风.欢迎来到SEO基础入门指南.在这个博客中主要教大家SEO的基础知识,以谷歌SEO为主,重点放在实操方面. 虽然是基础入门教程,但我希望朋友们不要对"初学者&qu ...

  5. NPIO在指定位置插入新列(附案例和代码)

    背景: I could be mistaken as I am not that familiar with NPOI, however, after a minor search, it appea ...

  6. 【Spring-Security】Re09 CSFR处理

    一.CSRF: CSRF 全称 Cross Site Request Forgery 跨站请求伪造 又称为OneClick Attack & SessionRiding 是非法请求访问,通过伪 ...

  7. 【Redis】05 持久化

    持久化概述 Redis提供了不同的持久性选项: 1.RDB持久性按指定的时间间隔执行数据集的时间点快照. 2.AOF持久性会记录服务器接收的每个写入操作,这些操作将在服务器启动时再次播放,以重建原始数 ...

  8. 除了Ubuntu以外的Linux系统可以安装Tensorflow/Pytorch的GPU版本吗???

    废话: 平时没事有用到的Linux系统有Centos/Redhat/Ubuntu/UOS/Deepin,其中Ubuntu系统主要是用来工作生产的,UOS就是看看国家队的进展如何,Deepin就是看看民 ...

  9. Java项目生产启动、关闭脚本

    1.直接启动 #!/bin/bash #这里可替换为你自己的执行程序,其他代码无需更改 APP_NAME=XXXX-api-1.0.jar #使用说明,用来提示输入参数 usage() { echo ...

  10. OI之奇葩错误

    链式前向星(写法 \(1\)):\(head\) 数组不初始化成 \(-1\).(同学写题) 链式前向星(写法 \(2\)):\(idx\) 不初始化成 \(1\).(同学写题) 用到队列时忘记 \( ...