C++const的多种用法

0. 写在最前面

在看《effective C++》前觉得代码都是自己写的,加不加这些const修饰,注不注意格式都无所谓啦,反正自己知道。看完后印象比较深的两点,一个是你设计的类有可能会给别人用,你这些良好的习惯可以防止别人在用你的类的时候出现一些低级错误,从而浪费时间。多人合作的时候也能够节省很多交流和统一意见的时间,一个合适的const使得代码一目了然。二则,代码会有版本更迭,再过一段时间,你或许会忘记自己当初的想法,良好的习惯这个时候就能给自己节省很多时间。所以,在合适的地方加上合适的const吧

你的Star是作者坚持下去的最大动力哦~~~

在函数末尾

一般在类中使用,表明其是const成员函数,不能修改成员变量,也即意味着不能调用非const成员函数。除非非静态成员变量前面加上了mutable修饰符,表明其是多变的。

void print2() const{cout<<num<<endl;
}

在函数前面

修饰函数返回值为const类型,只能读取,不能修改。

const bool is_man(){return true;
}
bool a = is_man();//error
const bool b = is_man();//right

作为函数参数

作为函数参数有三种形式,一种是普通的变量前面,如下面的第二个参数。一般只是起到警示的作用,因为形参本来就不可改变,函数内部会再生成一个实参。第二种是指针,详见下面指针部分的介绍。这里重点说下第三种,常引用,如下面函数第一个形参。一般用于数据量比较大的数据类型,不想生成实参的过程中产生大量的拷贝消耗,就只好用引用呗,又不想函数修改这个形参,那就加个const咯。

void saveImage(const Mat& m, const string path)

在指针前后

如果是普通类型,那大家应该都知道,表明这个变量是常量,不可变,如

const int kValue;
int const kValue;

但如果用const修饰的指针,const在前还是在后就差距很大了。

//kValue是常量指针,其指向的值不可变
const int* kValue;
int const *kValue;//不建议这种写法
//kPointer是常指针,指针本身不可变
int* const kPointer;
//两者都不可变
const int* const kPV

修饰成员变量

同上面一样,常量是需要在初始化时就赋值的,后面不能再修改。由于类的特殊机制,其初始化是在进入类的构造函数之前进行的,所以其唯一的初始化方法就是使用参数初始化表的形式:

Box::Box(int h, int w, int t):height(h), width(w), kThreshold(t){}

这里kThreshold就是类常量成员。


喜欢我的文章的话Star一下呗Star

版权声明:本文为白夜行的狼原创文章,未经允许不得以任何形式转载

转载于:https://www.cnblogs.com/HaoQChen/p/11048589.html

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

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

相关文章

[vue] vue为什么要求组件模板只能有一个根元素?

[vue] vue为什么要求组件模板只能有一个根元素&#xff1f; ‘为什么只能有且只有一个根元素’于是我花了二十多分钟去找了一下答案......竟然没有找到答案....好的现在我来说说我的理解&#xff0c;如果有不对的地方欢迎指出。我觉得这个问题需要从两个方面来说起&#xff1a…

java面试技术问题_11个JAVA面试中常见技术问题

原标题&#xff1a;11个JAVA面试中常见技术问题大家在平常面试java的过程中都会遇到哪些难题呢&#xff1f;还有一些即将去面试java的童鞋们&#xff0c;你们想知道技术面试中会涉及到哪些点吗&#xff1f;达妹为你整理Java面试中会被问到的几个技术难题。1、一个".java&q…

终于用到DataGrid了,比较郁闷

我用的是windows窗体的DataGrid控件在显示时间的时候&#xff0c;不显示具体的小时/分钟/秒上网查资料&#xff0c;介绍的都是web下的DataGrid如何现实&#xff0c;form下的不能用这些办法谁能帮帮我谢谢~~转载于:https://www.cnblogs.com/foreverpk/archive/2006/03/16/351759…

[vue] EventBus注册在全局上时,路由切换时会重复触发事件,如何解决呢?

[vue] EventBus注册在全局上时&#xff0c;路由切换时会重复触发事件&#xff0c;如何解决呢&#xff1f; 建议在created里注册&#xff0c;在beforeDestory移出个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家…

Java list接口

list中的元素可以重复&#xff0c;父接口是collection&#xff0c;实现类是&#xff1a;arraylist和vector。 arraylist&#xff1a; package com.jike.list;import java.util.ArrayList; import java.util.List;public class ListDemo01 {public static void main(String[] ar…

java treemap api_Java 8 Stream API toMap转换为TreeMap

public class Message {private int id;private User sender;private User receiver;private String text;private Date senddate;..}我有List list new ArrayList<>();我需要将它们转换为TreeMap> map我知道如何使用转换为HashMaplist.stream().collect(Collectors.g…

苏州游记

已经很久没有更新这里了&#xff0c;懒哦&#xff01;上周末一干人等去了苏州的三山岛&#xff0c;很是开心&#xff0c;春天来了&#xff0c;到处都是那么的生机盎然&#xff01;三山岛是太湖上若干岛屿之一&#xff0c;离苏州城很远&#xff0c;我们乘了50分钟的火车后&#…

java 图片合成 红色失真_Java - 处理某些图片泛红

参考博文&#xff1a;http://blog.csdn.net/kobejayandy/article/details/44346809http://blog.csdn.net/shixing_11/article/details/6897871http://blog.csdn.net/cuihailiang/article/details/52037389问题现象&#xff1a;Java上传图片时&#xff0c;对某些图片进行缩放、裁…

markdown 转义字符

\\ 反斜杠   \ 反引号   \* 星号   \_ 下划线   \{\} 大括号   \[\] 中括号   \(\) 小括号   \# 井号   \ 加号   \- 减号   \. 英文句号   \! 感叹号 转载于:https://www.cnblogs.com/willingtolove/p/10456027.html

[vue] 怎么修改vue打包后生成文件路径?

[vue] 怎么修改vue打包后生成文件路径&#xff1f; webpack&#xff1a;output.path vue-cli3: outputDir个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

[ERROR]在删除BizTalk主机之前必须删除其所有实例?

在删除时报错如下&#xff1a;------------------------------------无法从 MessageBox 数据库服务器“BLADE14”&#xff0f;数据库名称“BizTalkMsgBoxDb”删除与 BizTalk 主机“OrchestrateServiceDeskEventHost”关联的数据库对象。在删除 BizTalk 主机之前必须删除其所有实…

[vue] 说说你对vue的mixin的理解,有什么应用场景?

[vue] 说说你对vue的mixin的理解&#xff0c;有什么应用场景&#xff1f; mixins 就是混入。一个混入对象可以包含任意组件选项。同一个生命周期&#xff0c;混入对象会比组件的先执行。//暴露两个mixins对象 export const mixinsTest1 {methods: {hello1() {console.log(&qu…

cadence 旋转快捷键_cadence原理图快捷键

原标题&#xff1a;cadence原理图快捷键Allegro Design Entry CIS 原理图1.shift鼠标滚轮 左右移动2.Ctrl鼠标滚轮 放大缩小3.Alt鼠标滚轮 上下移动4.按下鼠标滚轮可任意方向拖动图纸(可以一直保持按下状态或者按一下松开)5.CTRL鼠标左键 &#xff1a; 元件叠选6.CTRL鼠标左键拖…

Lab 11-1

Analyze the malware found in Lab11-01.exe. Questions and Short Answers What does the malware drop to disk? A: The malware extracts and drops the file msgina32.dll onto disk from a resource section named TGAD.How does the malware achieve persistence? A: T…

复制服务器的配置

设置SQL Server复制服务器时&#xff0c;必须执行几项任务来确保复制会按计划运作。以下是必须完成的工作列表&#xff1a;1。确保在分发服务器上有足够的内存空间。2。确保分发服务器上的工作目录对于分发服务器是可见的。缺省的工作目录\MSSQL\REPLDATA&#xff0c;这个目录存…

[vue] watch怎么深度监听对象变化

[vue] watch怎么深度监听对象变化 deep设置为true 就可以监听到对象的变化let vmnew Vue({el:"#first",data:{msg:{name:北京}},watch:{msg:{handler (newMsg,oldMsg){console.log(newMsg);},immediate:true,deep:true}}})个人简介 我是歌谣&#xff0c;欢迎和大家一…

head first java原文_Head First Java

条件语句&和|可以用作条件语句&#xff0c;但是是长连接&#xff0c;左右两边的表达式必须都执行完&#xff01;这和&&和||不同&#xff0c;&&和||是短连接&#xff0c;只要左边的表达式已经能够计算出整个表达式的结果&#xff0c;右边的表达式就不会执行…

C#操作XML

已知有一个XML文件&#xff08;bookstore.xml&#xff09;如下&#xff1a; <?xml version"1.0"encoding"gb2312"?><bookstore><book genre"fantasy"ISBN"2-3631-4"><title>Oberons Legacy</title> &…

[vue] $nextTick有什么作用?

[vue] $nextTick有什么作用&#xff1f; 处理数据动态变化后&#xff0c;dom还未及时更新的问题。nexttick就可以获取到数据更新后最新的dom变化个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目…

java 覆盖和隐藏_Java方法的覆盖与隐藏的区别分析

本篇文章介绍了&#xff0c;关于Java方法的覆盖与隐藏的区别分析。需要的朋友参考下关于隐藏和覆盖的区别&#xff0c;要提到RTTI(run-time type identification)(运行期类型检查)&#xff0c;也就是运行期的多态&#xff0c;当一个父类引用指向子类对象的时候&#xff0c;请看…