Item3 尽可能使用const_const item&a_子建莫敌的博客-程序员秘密

技术标签: c++  Effective C++  

const多才多艺,告诉编译器和其他程序员某值应该保持不变。

可以用在class外部修饰global或namespace作用域中的常量,修饰文件,函数,或static对象。

char greeting[] = "hello";
char* p = greeting;    //non-const pointer, non-const data
const char* p = greeting; // non-const pointer, const data
char* const p = greeting; // const pointer, none const data
const char* const p = greeting;    // const pointer, const data

如果关键字const出现在星号左边,表示被指物为常量。如果出现在星号右边,表示指针自身是常量。如果出现在星号两边,表示被指物和指针都是常量。

以下两种写法一样:

void f1(const widget* pw);
void f2(widget const * pw);

const成员函数

为了确认成员函数可作用于const对象

作用:

  1. 使class接口容易被理解,明确哪些函数可以改的对象内容
  2. 操作const对象

若想在const函数中,修改非const成员,可以使用multable关键字修饰。这样可以释放掉non-static成员变量的一些束缚。

写在最后

当const和non-const成员函数有实质等价的代码实现时,令non-const调用const,可以避免代码重复。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013015629/article/details/107397122

智能推荐

关于STM32CubeIDE使用的问题_i-Fox的博客-程序员秘密

1、版本,尽量使用同一版本,无论是CebuMX 还是CubeIDE。CubeIDE打开低版本的ioc文件时,本人遇到的是,会删除这个工程中的所有文件,导致整个工程都找不到了,后使用cubemx打开生成一次后,把ioc的版本提高后,再升级了CubeIDE才能正常使用了。建议:在项目开发过程中,选定一个软件版本,不要升级,不要更改(除非有致命的bug).未完待续.........

vue项目中使用大图片提前预加载处理方案_JackieDYH的博客-程序员秘密

目的: 图片预加载能够使得用户在浏览后续页面的时候,不会出现图片加载一半导致浏览不流畅的情况。方案一项目打开的时候要对图片进行预加载,在App.vue里面的beforeCreate添加预加载程序App.vuebeforeCreate(){ let count = 0; let imgs = [ //用require的方式添加图片地址,直接添加图片地址的话,在build打包之后会查找不到图片,因为打包之后的图片名称会有一个加密的字符串 requ.

️跟上时代步伐,走进Android开发架构设计演变️_TherJYH的博客-程序员秘密

去年10月底来到了新公司,刚开始接手 Android 项目时,发现该项目真的是一团遭,项目开发上没有任何架构可言,开发人员连简单的 MVC、MVP 都不了解,Activity 及其臃肿,业务边界也不明确,因此我决定重新分析一下当前主流的几种开发架构,选出适合当前项目的架构形式,顺便带大家进入下实战演练。说到 Android 应用的架构,大家都不陌生。最早使用的是 MVC 模式(Model–view–controller),但 MVC 模式下 Activity 类过于臃肿,为解决这个问题,有了 M.

ARX CAD HW9_2_飞天狐狸的博客-程序员秘密

原创辛苦,转载请注明!编写一ObjectARX命令EllipseTest,实现由用户交互方式生成椭圆的功能。生成方式有命令方式和ARX方式两种供用户选择。用户交互输入的参数有:椭圆中心点、长轴长度、短轴长度和生成方式(命令方式[com]/ARX方式[arx])。椭圆在ObjectARX中的实体类是AcDbEllipse(头文件dbelipse.h),详细信息请参阅ObjectARXRefe

SDNU_ACM_ICPC_2020_Winter_Practice_3rd A dfs_tom the robocat is presented in a robotics exhibit_夷则九的博客-程序员秘密

题目Tom the robocat is presented in a Robotics Exhibition for an enthusiastic audience of youngsters, placed around an m n field. Tom which is turned off initially is placed in some arbitrary point in ...

随便推点

Alpine Linux 网络连接工具 - iproute2 / ip ss_alpine linux查看ip_唧唧歪歪的的博客-程序员秘密

Alpine Linux 实用工具 - iproute2 / ssiproute2 安装apk add iprout2iproute2 命令 ssUsage: ss [ OPTIONS ] ss [ OPTIONS ] [ FILTER ] -h, --help this message -V, --version o...

virtualbox 安装时Kernel driver not installed (rc=-1908) 错误的终极解决方法_kiddoneal的博客-程序员秘密

yum install gcc yum install kernel-devel yum install kernel-headersyum install dkms升级内核后有问题只需执行后面3步

tableau绘制热图_热图排序_小白-小天的博客-程序员秘密

效果展示*操作步骤:导入数据源–绘制热力图雏形–调节颜色–设置中间值–排序–显示更多信息。1.数据来源:tableau自带的数据源示例–超市。*2.选中子类别,省/自治区和利润在右边智能显示中选中热图,就可绘制出一个简单的热图,但是这并不是我们想象中的样子。3.我们对这个热图进行简单的美化,首先把总和利润使用颜色来显示,这就比较接近我们想象中的样子了。...

keil CMSIS-RTOS API介绍_sunflowerfsw的博客-程序员秘密

1.Kernel information and Control:           osKernelInitialize (void)       Initialize the RTOS Kernel for creating objects.        osKernelStart (void)            Start the RTOS Kernel.

PHP语法_php {ife }_苏洛荨的博客-程序员秘密

1、双引号和单引号的区别双引号解释变量,单引号不解释变量双引号里插入单引号,其中单引号里如果有变量的话,变量解释双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误双引号解释转义字符,单引号不解释转义字符,但是解释'\和\\能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要

【模糊查询】oracle中带有特殊符号的模糊查询_oracle查询星号能显示部分信息吗_muzi1314_的博客-程序员秘密

首先讲一下Oracle模糊查询,模糊查询使用的是like关键字Oracle模糊查询可使用的通配符,Oralce中SQL语句提供了四种匹配模式:%   零或者多个字符_    单一任何字符(下划线)\     特殊字符[]     在某一范围内的字符,如[0-9]或者[aeth]  [^]    不在某范围内的字符,如[^0-9]或者[^aeth]后两种, 需要Oracl

推荐文章

热门文章

相关标签