const、引用与指针
前提
我们忽略掉了相同类型是否可以赋值的情况(我到现在的学习里都还可以相互赋值),以及类型兼容的情况。只考虑const、&、*等修饰符带来的影响
类型兼容:
- 强制类型转换
- 基类与子类间的兼容
- 类的构造函数类型兼容(构造函数的参数类型可以转换为该类的类型,仅转换一次)
前置const与后置cconst
const:
- const初始化的变量要必须绑定一个值(变量还是常量都行)
- 这个绑定值可以隐式或者显示,大部分时候用显示更安全
- eg:string等容器,使用构造函数可以进行隐式默认初始化,const string str;就是合法的
前置const:
前置const写在其他修饰符前面,也就是距离变量较远的地方
- 此类const修饰的变量一般指向的对象可以是变量也可以是常量
- 不可修改指向的对象
- 也不可以将该变量赋值给同类型的无const修饰的变量
后置const:
- 用此类const修饰的变量,变量都会变为常量
- 常量是右值,不能进行赋值操作
- 常量是可以进行初始化赋值的
const指针
指针:
- 会有自己的空间
- 指向目标对象
const type *ptr
此ptr 认为 自己指向的是一个常量,不能改变所指对象的值,但还是可以释放掉内存,该ptr也是一个变量(左值),可以进行赋值,但不能让它赋值给无const修饰的同类型的指针
type *const ptr
- 该ptr是常量(右值), 不接受赋值操作,ptr现在也变成了const常量
- 可以进行初始化赋值
const引用
(无const修饰)引用:
- 必须绑定一个左值
- 取的另一个别名
- 只能初始化进行绑定一次
const type &temp = variate
variate可以是常量,也可以是变量,temp不能改变
(const type &temp 可以绑定右值,但是右值不一定都是const类型,这样绑定后可能会使得temp失去原来右值的部分功能)
- temp会成为一个常量
type & const temp = variate
规定不能这么写,可以进行,个人猜测:const temp是一个常量写法进行赋值,在加上&,是一个引用写法,引用是取别名,与有着实际意义的cosnt常量矛盾
const、引用与指针的更多相关文章
- 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用
[源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, con ...
- 【c++基础】const、const指针、const引用
一.const常量 声明时必须同时初始化(和“引用”一样) 二.const指针 三.const引用 引用本身和引用的对象都是const对象,可以用字面值来赋给const引用(普通引用则不行) ; co ...
- C++引用和const引用、常量指针、指针常量
1.引用.常量引用 引用主要被用做函数的形式参数--通常将类对象传递给一个函数. 引用在内部存放的是一个对象的地址,它是该对象的别名.引用不占用内存,因为取地址引用的值和被引用变量的地址相同.但是ob ...
- c++引用和const 用法 数组 指针
非const引用,只能用object为其赋值: <c++primer>P52 而const引用则可以用临时变量为其赋值: 如: const int &r = 32://可以 int ...
- C++ const 引用 指针
先简单回忆一下常量的性质: int main() { const int buffSize = 512; buffsize = 512; //× buffSize是常量 } 初始化时: const i ...
- C++ 中的 const、引用和指针的深入分析
1,关于 const 的疑问: 1,const 什么时候为只读变量,什么时候是常量: 1,const 从 C 到 C++ 进化的过程中得到了升级,const 在 C++ 中不仅仅像在 C 中声明一个只 ...
- 函数返回值为 const 指针、const 引用
函数返回值为 const 指针,可以使得外部在得到这个指针后,不能修改其指向的内容.返回值为 const 引用同理. class CString { private: char* str; publi ...
- c++中的引用与指针的区别
http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...
- C++中引用与指针的区别(详细介绍)
C++中引用与指针的区别(详细介绍) C++中的引用与指针的区别 指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一 ...
随机推荐
- WPF界面设计中常用的一些代码片段及属性
一.窗体去掉标题栏.消除掉标题栏后的白边,把窗体置于屏幕中间,窗口大小不能改变. WindowStyle="None" AllowsTransparency="True& ...
- angular 基本树结构
HTML: http://www.ngnice.com/showcase/#/tree/basic <link rel="stylesheet" href="vie ...
- Vuex持久化存储之vuex-persist
在引入mapMutations时报错,解决方法: 1:npm install --save-dev babel-plugin-transform-object-rest-spread 2:在packa ...
- 利用zepto.js实现移动页面图片全屏滑动
HTML <%-- Created by IntelliJ IDEA. User: fanso2o Date: 2017/2/28 Time: 16:09 To change this temp ...
- Java开源诊断工具 Arthas 发布v3.1.0
Arthas 自2018年9月份上线以来「传送门」,已收获近万个star,感谢开发者们的认可.此次Arthas 3.1.0版本的发布,不仅带来大家投票出来的新LOGO,还带来强大的新功能和更好的易用性 ...
- webpack处理字体文件
1. 安装 file-loader npm install file-loader --save-dev 2. 在webpack.config.js中配置 module.exports={ //... ...
- 转载 ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(三) 激动人心的时刻到啦,实现1v1聊天
ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(三) 激动人心的时刻到啦,实现1v1聊天 看起来挺简单,细节还是很多的,好,接上一篇,我们已经成功连接singalR服务器 ...
- css3新特性概览
一.特性 1.强大的选择器 2.半透明度效果的实现 3.多栏布局 4.多背景图 css3允许背景属性设置多个属性值,如:background-image,background-repeat,backg ...
- 跟我一起做一个vue的小项目(六)
接下来我们编写周末游组件 <template> <div> <div class="recommend-title">周末去哪儿</div ...
- Laravel 日志权限问题
laravel发现日志写入不了, 因为此日志是定时任务生成的, 定时任务的执行用户时root 解决方法: 方法1.修改执行定时任务的用户, 不过www用户时无法登陆的, 可能有点麻烦 方法2.修改la ...