Item 3 使用const

 1.迭代器const

std::vector<int> vec;
...
const std::vector<int>::iterator iter =     // iter acts like a T* constvec.begin();
*iter = 10;                                 // OK, changes what iter points to
++iter;                                     // error! iter is const
//
std::vector<int>::const_iterator cIter =    // cIter acts like a const T*vec.begin();
*cIter = 10;                                // error! *cIter is const
++cIter;                                    // fine, changes cIter

 记住就好 

2.函数const

在一个函数声明,const 既可以用在函数的 返回值,也可以用在个别的参数,对于 成员函数,还可以用于整个函数。

特别的是 对于成员函数的整个const 代表 不修改该对象的任何成员变量

在函数的最后面加const 和不加const是两个函数  是重载的!!!

 3.*运算符重载

//返回值为const Rational 
const Rational operator*(const Rational& lhs, const Rational& rhs);
Rational a, b, c;...(a * b) = c; // invoke operator= on the// result of a*b!if (a * b = c) ... // oops, meant to do a comparison!
//少了一个等号   如果是const 会报错

为了防止这样的出现 (a*b)   若不是const       (a * b = c)不会报错

3.const成员函数

class TextBlock {
public:...const char& operator[](std::size_t position) const   // operator[] for{ return text[position]; }                           // const objectschar& operator[](std::size_t position)               // operator[] for{ return text[position]; }                           // non-const objectsprivate:std::string text;
};void print(const TextBlock& ctb)       // in this function, ctb is const
{std::cout << ctb[0];                 // calls const TextBlock::operator[]...
}TextBlock tb("Hello");
std::cout << tb[0];                    // calls non-const// TextBlock::operator[]
const TextBlock ctb("World");
std::cout << ctb[0];                   // calls const TextBlock::operator[]

4.位不变和逻辑不变

 如char* txt=“hello";  改变其hello的值  text指针的位置并未发生改变    

class CTextBlock {
public:...char& operator[](std::size_t position) const   // inappropriate (but bitwise{ return pText[position]; }                    // const) declaration of// operator[]
private:char *pText;
};const CTextBlock cctb("Hello");        // declare constant objectchar *pc = &cctb[0];                   // call the const operator[] to get a// pointer to cctb's data*pc = 'J';                             // cctb now has the value "Jello"const CTextBlock cctb("Hello");        // declare constant objectchar *pc = &cctb[0];                   // call the const operator[] to get a// pointer to cctb's data*pc = 'J';                             // cctb now has the value "Jello"

 5.mutable

class CTextBlock {
public:...std::size_t length() const;private:char *pText;mutable std::size_t textLength;         // these data members maymutable bool lengthIsValid;             // always be modified, even in
};                                        // const member functionsstd::size_t CTextBlock::length() const
{if (!lengthIsValid) {textLength = std::strlen(pText);      // now finelengthIsValid = true;                 // also fine}return textLength;
}

6.去除重复代码

定义const的函数 在no const中调用

class TextBlock {
public:TextBlock(const std::string& text) : text(text) {}const char& operator[](std::size_t position)               // operator[] for{return text[position];}                           // non-const objectsconst char& operator[](std::size_t position) const   // operator[] for{return const_cast<char&>(static_cast<const TextBlock*>(this)->text[position]);}                           // const objects
private:std::string text;static int static_var ;
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/17645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW通过以太网控制PLC程序开发

在使用LabVIEW通过以太网控制PLC程序开发时&#xff0c;需要综合考虑硬件、软件和通信协议的协调工作。以下是详细步骤、注意事项、重点和难点分析&#xff0c;以及几种实现方式及其特点的概述。 实现步骤 确定硬件和软件环境&#xff1a; 确定PLC型号和品牌&#xff08;如西门…

WebGL技术在工程控制中的应用

WebGL技术在工程控制中的应用非常广泛&#xff0c;它利用了浏览器内的强大图形处理能力&#xff0c;可以为工程领域提供实时的三维可视化和交互功能。以下是WebGL在工程控制中的几个主要应用领域及其具体应用。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&…

【Qt 学习笔记】Qt窗口 | Qt窗口介绍 | QMainwindow类及各组件介绍

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt窗口 | Qt窗口介绍 | QMainwindow类及各组件介绍 文章编号&#xff…

自媒体内容平台试水一个月的结果分析

文章目录 B站:可尝试精品短视频试水数据第三方数据热门作品的类型分析热门作品的结构设计热门作品的长度分析知乎:可尝试热点文章试水数据第三方数据热门作品的类型分析热门作品的结构设计热门作品的长度分析小红书:可尝试精品图文试水数据第三方数据热门作品的类型分析

【Redis】Redis 报错信息及解决办法

Redis 报错信息及解决办法 报错信息1&#xff1a;A component required a bean of type ‘redissonClient’ that could not be found 思路&#xff1a; RedissonClient 是 org.redisson 包中的一个类。为了使用 RedissonClient&#xff0c;通常我们确实需要手动配置它&…

力扣63 不同路径Ⅱ Java版本

文章目录 题目描述代码 题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格…

粤嵌—2024/5/28—最大正方形(✔)

代码实现&#xff1a; 方法一&#xff1a;模拟——超时 int maximalSquare(char **matrix, int matrixSize, int *matrixColSize) {int maxSide 0;if (matrix NULL || matrixColSize NULL || matrixSize < 0 || matrixColSize[0] < 0) {return 0;}for (int i 0; i &l…

【每日一坑】KiCAD 覆铜区域约束

【每日一坑】 1.螺丝孔周围不想要要铜皮&#xff1b; 2、首先在CTRLshiftK;画一个区域&#xff0c;比如铺一个GND; 3、选择CUTOUT; 4、画线&#xff0c;画好闭合图形&#xff1b;如下图 5、就是这样了&#xff0c;就是还没有画圆或者异形的&#xff1b;

linux安装Java报错cannot execute binary file: Exec format error

uname -a 查看自己jdk版本 下载JDK路径Java Archive Downloads - Java SE 17 下载对应的版本jdk jdk-17.0.10_linux-aarch64_bin.tar.gz jdk-17.0.10_linux-x64_bin.tar.gz

吴恩达深度学习笔记:超 参 数 调 试 、 Batch 正 则 化 和 程 序 框 架(Hyperparameter tuning)3.8-3.9

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第三周&#xff1a; 超 参 数 调 试 、 Batch 正 则 化 和 程 序 框 架&#xff08;Hyperparameter …

【Python】 删除列表元素的简单方法

基本原理 在Python中&#xff0c;列表&#xff08;list&#xff09;是一种非常灵活的数据结构&#xff0c;它允许我们存储一系列的元素。有时&#xff0c;我们需要根据元素的值来删除列表中的特定元素。虽然Python没有内置的函数直接通过值来删除列表中的元素&#xff0c;但我…

vue3使用Element Plus的el-table,高亮当前点击的单元格

⭐主要使用el-table的cell-style属性和cell-click事件 1、给el-table添加cell-style属性和cell-click事件 <el-table:data"state.dataList"style"width: 100%"borderv-loading"state.loading":cell-style"cellStyle"cell-click&q…

01 一文理解,Prometheus详细介绍

01 一文理解&#xff0c;Prometheus详细介绍 介绍 大家好&#xff0c;我是秋意零。 Prometheus 是一个开源的系统监控和报警工具包&#xff0c;最初由SoundCloud开发&#xff0c;并在2012年作为开源项目发布。Prometheus 目前由Cloud Native Computing Foundation&#xff08…

Qt发生“无法消除重载函数歧义的问题”

当使用Qt5的信号与槽语法时&#xff0c;如果一个槽或信号被重载了&#xff08;即同一个函数名有不同的参数列表&#xff09;&#xff0c;编译器可能会因为不清楚应该连接哪个函数版本而报错。 为了解决这个问题&#xff0c;可以通过提供静态转型 (static_cast) 或者提供函数指针…

常见的螺纹防松措施有哪些?——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 螺纹连接作为机械工程中常见的连接方式&#xff0c;其稳定性和可靠性对于整个机械系统的正常运行至关重要。然而&#xff0c;由于振动、冲击、温度变化等因素的影响&#xff0c;螺纹连接往往会出现松动现象&#xff0c;…

设计模式--访问者模式

访问者模式是一种行为设计模式&#xff0c;它用于将算法与对象结构分离&#xff0c;使得算法可以独立于使用它的数据结构而变化。这种模式在许多应用场景中非常有用&#xff0c;例如在实现图形算法、数据结构遍历、文件格式转换以及代码分析时。 应用场景 图形算法&#xff1…

【Mac】Ulysses for Mac(优秀的markdown写作软件) v34.3中文版安装教程

软件介绍 哪款markdown写作软件最好用&#xff1f;小编推荐您使用尤利西斯&#xff1a;Ulysses mac版&#xff01;这是mac上一款优秀的markdown写作工具。Ulysses mac版具备全新的Soulmen写作坏境&#xff0c;采用了革命性的功能增强&#xff0c;结合了最好的部分最小标记&…

网络安全防护技术的应用

网络安全防护技术是确保网络系统安全的重要手段&#xff0c;它们包括多种技术和措施&#xff0c;可以有效地保护网络免受各种威胁。以下是一些常见的网络安全防护技术及其应用方法&#xff1a; 1. 防火墙技术 防火墙是网络安全的第一道防线&#xff0c;它可以监控网络流量并根…

DES加密算法笔记

【DES加密算法&#xff5c;密码学&#xff5c;信息安全】https://www.bilibili.com/video/BV1KQ4y127AT?vd_source7ad69e0c2be65c96d9584e19b0202113 根据此视频学习 DES是对称密码中的分组加密算法 (分组加密对应流加密算法) 流加密算法就是一个字节一个字节加密 分组加…

Day38 代码随想录打卡|二叉树篇---二叉树的最大深度

题目&#xff08;leecode T104&#xff09;&#xff1a; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 递归法&#xff1a; 递归法首先将根节点作为参数传入&#xff0c;随后每一轮传入当前节点的…