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

C++const的多种用法相关推荐

  1. Python库引用import多种用法及比较

    import多种用法 import<库名> <库名>.<函数名>(<函数参数>) 例如: import turtle turtle.penup() 这种 ...

  2. c语言常量的正确表示const,C语言中的const和free用法详解

    注意:C语言中的const和C++中的const是有区别的,而且在使用VS编译测试的时候.如果是C的话,请一定要建立一个后缀为C的文件,不要是CPP的文件.因为,两个编译器会有差别的. 一.C语言中的 ...

  3. python的concat用法_python的concat等多种用法详解

    本文为大家分享了python的concat等多种用法,供大家参考,具体内容如下 1.numpy中的concatenate()函数: >>> a = np.array([[1, 2], ...

  4. python concat_python的concat等多种用法详解

    本文为大家分享了python的concat等多种用法,供大家参考,具体内容如下 1.numpy中的concatenate()函数: >>> a = np.array([[1, 2], ...

  5. 关于ES6中let 和 const 命令的用法以及注意事项:

    let命令: 基本用法: let定义: 用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. <script> //let代码块内部定义的变量,与var ...

  6. C++指针与const的结合用法

    C++之const用法总结 指针与const的结合用法 指针与const的结合用法 基本概念:指针有两个值,一个是其自身的值(即所指变量的地址),一个是它所指向的值(这是理解其它用法的基础),所谓指针 ...

  7. 二维码URL多种用法总结

    二维码URL多种用法 一.二维码的类型 1.专属App的二维码 2.通用的URL网页 二.二维码判断:User Agent(UA) 三.二维码精进:URL+参数 四.二维码推广:携带参数安装 五.二维 ...

  8. (java)加号的多种用法

    //加号(+)的多种用法 package com.company; /* 1.对于数值来说,就是加法 2.对于char类型来说,在进行与数字的加法运算的时候,char会先转化为int类型然后再 进行运 ...

  9. java sort的用法_[Java教程]sort()的多种用法

    [Java教程]sort()的多种用法 0 2016-03-20 12:00:06 sort()  方法用于对数组的元素进行排序. 一.默认情况 在默认情况下, sort() 方法按升序排列数组项.为 ...

最新文章

  1. webview Java与JS互调
  2. python3.6小程序_python3.6 tkinter实现屏保小程序
  3. JMeter入门教程(自己做测试了)
  4. 默认开机启动;通过Broadcastreceiver广播监听开机启动,实现没有activity的自启服务或者自启应用程序。...
  5. 【一天一个shell命令】好管家-磁盘-du
  6. .net core word转pdf_免费在线转换PDF转Word、Word转PDF,办公必备神器
  7. 纯IPv6环境App适配的坑
  8. java setlocation_Java Point.setLocation方法代碼示例
  9. 网络安全防护部署,升级支持IPv6
  10. jsp文字上下居中显示_jsp中怎样让文字居中 ?
  11. 60. MySQLi 扩展拾遗
  12. K-special Tables
  13. Video Target Tracking Based on Online Learning—TLD多目标跟踪算法
  14. 深入浅出 Python Descriptors / Properties
  15. Excel常用技巧(一)
  16. 漂亮特殊字体可复制_特殊字体生成器 漂亮特殊字体可复制
  17. Java两个线程交替打印奇偶数(两种方法对比)
  18. 技术人生的职场众生相
  19. Python爬虫(5):豆瓣读书练手爬虫
  20. Oracle数据库的可视化界面

热门文章

  1. 在Ubuntu下如何压缩一个文件夹
  2. MSP432P401R TI Drivers 库函数学习笔记(三)认识任务的创建及图形化配置
  3. 前端学习(3302):createRef
  4. 前端学习(3104):react-hello-虚拟dom和真实dom
  5. 前端学习(2921):vue的事件
  6. [html] 写一个布局,它的宽度是不固定的100%,如果让它的宽度始终是高度的一半呢?
  7. [css] 你有使用过哪些栅格系统?都有什么区别呢?
  8. [css] 举例说明你知道的css技巧有哪些?
  9. 工作335:uni-ele-el-date-picker限制选择时间
  10. 工作194:vue.runtime.esm.js?2b0e:619 [Vue warn]: Duplicate keys detected: ‘/system‘. This may cause an