c++ const 关键字 学习笔记
const简单介绍:
1不再使用c中的#define,c++默认不给const定义的变量分配内存,所以它默认的是仅本文件可以看到该变量(即internal linkage),
const int bufisze;
如果工程中的文件看见,就要明显的写出关键字extern,即,此时编译器会给它分配内存。
extern const int bufisze = 100;
另外:
extern const int bufsize;//只是声明不是定义const int bufsize=10;//必须加上如此定义// int bufsize=1;!error //bufsize=1;erroconst buf;//错误,因为默认的只有内部文件可见,必须定义的时候就初始化。
2 const修饰参数
表示该参数不能改变。
void f(const int i){ i++;//error}
注:
在使用某些类,特别是比较大的类的时候,我们经常看到参数的形式如 fun(const Integer & a),(Integer 是某个自定义类)使用引用和const。我对此的理解是:
1 ”引用参数”的效率优于“传值参数”。传值调用参数是一个局部变量,会被初始化为相同的参数值,那么调用函数时候会存在两个副本,而引用相当于直接用了那个地址的参数。(所以函数中若改变了引用的参数,结果会保留)
2我们既不想创造两个副本,所以用“引用&”,不要确定该类的参数没有被改变,所以经常我们会看到这种语法,
const Integer & a,既提高效率,又确定不改变类a
3返回Const(Returning by const value)//防止该函数作为左值lvalue
主要针对,返回值为自定义的类,对于built-in type(如int,double),加不加无所谓。
const X f6();
…
f6()=X(1)//error
其目的就是为了实现用户自定义类型与内置类型最大限度的保持一致性。
比如操作 a+b = c; 对于内置类型在编译时,会弹出不能对lvalue进行赋值的错误;然而对于用户自定义类型,比如class A{}; 当对A定义了形式为
A operator+(const A& lhs, const A& rhs){};的接口时,编译和连接过程不会出现内置类型弹出的错误。
解决办法就是给函数的返回值加上const标识,指定不能对函数的返回值进行赋值,如此一来,对于自定义类型,再进行a+b = c;操作时,编译过程也会报错。
在现实的编码中,可能谁也不会敲出a+b=c;这样的单纯语句,但是你不可能保证在你想表达if(a+b == c)时,却一时马虎写成了if(a+b = c),程序能够编译连接通过,但不是按你想要的逻辑运行,于是问题就出现了,这个问题应该再编译时期就被发现的
//此段参考http://blog.csdn.net/zhjxin1800/article/details/7584375
4成员函数Const
如果你有一个成员函数,他不应该更改该对象成员(非静态)的值,就应该在声明,定义最后加const
如
void ouput() const;
该类的const对象,只能调用const成员函数,不能调用非const成员函数。
本人水平有限,怀着分享学习的态度发表此文,欢迎大家批评,交流。感谢您的阅读。
欢迎转载本文,转载时请附上本文地址: http://www.cnblogs.com/Dzhouqi/p/3393203.html
另外:欢迎访问我的博客 http://www.cnblogs.com/Dzhouqi/
转载于:https://www.cnblogs.com/Dzhouqi/p/3393203.html
c++ const 关键字 学习笔记相关推荐
- mysql中的 explain 关键字学习笔记
explain 查看sql的执行计划,使用该关键字可以查看分析sql 语句在 mysql 中的执行步骤,索引的使用,可以检查该sql 语句和表结构的性能瓶颈,在sql 优化中工作可以说该关键字是相关开 ...
- 前端const的学习笔记
目录 一.const是什么? 二.const与let的不同之处 三.const的使用情况 四.真实开发的使用例子 总结 一.const是什么? const是用来声明常量的,百度上是这么描述的: con ...
- java中volatile关键字---学习笔记
volatile关键字的作用 在java内存模型中,线程之间共享堆内存(对应主内存),但又各自拥有自己的本地内存--栈内存,线程的栈内存中缓存有共享变量的副本,但如果是被volatile修饰的变量,线 ...
- C语言学习及应用笔记之三:C语言const关键字及其使用
在C语言程序中,const关键字也是经常会用到的一个关键字,那么使用const关键字的目的是什么呢?事实上,在程序中使用const关键字的主要目的就是为了向使用者传递设计者的一些意图. 事实上,无论我 ...
- JavaScript:学习笔记(7)——VAR、LET、CONST三种变量声明的区别
JavaScript:学习笔记(7)--VAR.LET.CONST三种变量声明的区别 ES2015(ES6)带来了许多闪亮的新功能,自2017年以来,许多JavaScript开发人员已经熟悉并开始使用 ...
- c语言存储类型关键字作用,c语言学习笔记.关键字.存储类型关键字等
关键字const 1.修饰变量. 修饰的对象为常量,只读. 2.修饰指针. const 也可以和指针变量一起使用,这样可以限制指针变量本身,也可以限制指针指向的数据. const 离变量名近就是用来修 ...
- 《从零开始学Swift》学习笔记(Day5)——我所知道的标识符和关键字
Swift 2.0学习笔记(Day5)--我所知道的标识符和关键字 原创文章,欢迎转载.转载请注明:关东升的博客 好多计算机语言都有标识符和关键字,一直没有好好的总结,就是这样的用着,现在小 ...
- 2020-09-21C++学习笔记之与C语言区别和加强——四种const意义(const int a; int const b; const int *c; int * const d)
2020-09-21C++学习笔记(const int a; int const b; const int *c; int * const d) 这两天在上课更新晚了. 1.C/C++中的const ...
- 【 C 】const 学习笔记
const介绍 const是一个C语言(ANSI C)的关键字,具有着举足轻重的地位.它限定一个变量不允许被改变,产生静态作用.使用const在一定程度上可以提高程序的安全性和可靠性.另外,在观看别人 ...
最新文章
- C#线程同步的几种方法
- opencv利用直方图判断人脸光照质量
- 类实现Parcelable接口在Intent中传递
- 程序员如何缓解“电脑病”
- 微信小程序运行报错---invoke event
- Linux设备驱动开发详解-Note(5)---Linux 内核及内核编程(1)
- 微信里文件小程序导不出来_懒得打开电脑传文件?这四类小程序把这事解决了-小程序视频怎么发在电脑上...
- Go中函数作为值、类型传递。
- dynamips中网卡参数如何和网络连接中的具体网卡匹配
- kindle 不能连接wifi的三个原因
- 城建税和教育费附加怎么计算
- RdViewer(远程控制电脑屏幕软件)官方中文版V3.3.1 | rd远程工具下载
- js中utf8和中文互转的方法
- 看懂卫星遥感数据RPC文件
- 甄选北京十大律师事务所排名榜(资深团队、胜诉率高)
- Springboot毕设项目基于WEB的延边旅游网 5jjp2java+VUE+Mybatis+Maven+Mysql+sprnig)
- 切绳子(二分,c语言)
- jqury(jquery是干什么的)
- pcm5102a解码芯片音质评测_200元苹果airpods超强平替,新品JEET ONE蓝牙耳机开箱评测!...
- java中.next()方法的作用及应用?
热门文章
- 公共端接正极还是负极_【动力电池大事记】现代摩比斯启动首批模组工厂,松下拟挪威建厂,200名车主起诉现代,密歇根大学开发锂金属固态电池及“无负极”工艺...
- java 文件写入 读取_JAVA文件的两种读取方法和三种写入方法
- python添加lxml库_7分钟,建议看完这5个Python库对比丨web抓取
- 智慧农场基本情况交流会议记录
- 基于蔡氏混沌电路进行非线性共振探究
- 机器人把大龙拉出来_LECW4D1综述:塞拉斯一日三登赛场 IgNar机器人重现江湖
- 检查oracle安装,oracle安装前环境检查
- linux .sh文件 命令如何写,Linux下面使用命令如何运行.sh文件的两种解决办法
- applicationcontext添加配置_Spring源码分析2 — spring XML配置文件的解析流程
- 日常make 的小技巧