前提

我们忽略掉了相同类型是否可以赋值的情况(我到现在的学习里都还可以相互赋值),以及类型兼容的情况。只考虑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、引用与指针的更多相关文章

  1. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  2. 【c++基础】const、const指针、const引用

    一.const常量 声明时必须同时初始化(和“引用”一样) 二.const指针 三.const引用 引用本身和引用的对象都是const对象,可以用字面值来赋给const引用(普通引用则不行) ; co ...

  3. C++引用和const引用、常量指针、指针常量

    1.引用.常量引用 引用主要被用做函数的形式参数--通常将类对象传递给一个函数. 引用在内部存放的是一个对象的地址,它是该对象的别名.引用不占用内存,因为取地址引用的值和被引用变量的地址相同.但是ob ...

  4. c++引用和const 用法 数组 指针

    非const引用,只能用object为其赋值: <c++primer>P52 而const引用则可以用临时变量为其赋值: 如: const int &r = 32://可以 int ...

  5. C++ const 引用 指针

    先简单回忆一下常量的性质: int main() { const int buffSize = 512; buffsize = 512; //× buffSize是常量 } 初始化时: const i ...

  6. C++ 中的 const、引用和指针的深入分析

    1,关于 const 的疑问: 1,const 什么时候为只读变量,什么时候是常量: 1,const 从 C 到 C++ 进化的过程中得到了升级,const 在 C++ 中不仅仅像在 C 中声明一个只 ...

  7. 函数返回值为 const 指针、const 引用

    函数返回值为 const 指针,可以使得外部在得到这个指针后,不能修改其指向的内容.返回值为 const 引用同理. class CString { private: char* str; publi ...

  8. c++中的引用与指针的区别

    http://blog.csdn.net/lyd_253261362/article/details/4323691 c++中的引用与指针的区别 ★ 相同点: 1. 都是地址的概念: 指针指向一块内存 ...

  9. C++中引用与指针的区别(详细介绍)

    C++中引用与指针的区别(详细介绍) C++中的引用与指针的区别   指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址(指针指向的地址)中的内存内容及大小,而void*指针则只表示一 ...

随机推荐

  1. hdu1527

    hdu1527两堆博弈模型,威佐夫博弈 #include<iostream> #include<cstdio> #include<queue> #include&l ...

  2. NOI2018 Day1 归程(return)

    第一次参加NOI,当然,我没去现场做,只是在网络同步赛做了而已. 那网站,特别特别卡啊-- 最后只交了第一题,原本认为能AC,但是因为某些原因只有50分. 我这可怜的第一次啊-- 题目 题目点此处下载 ...

  3. php连接数据库插入数据

    <form action="updata.php" method="post"> 姓名:<input type="text" ...

  4. typescript使用小结

    1. typescript使得js在书写的过程中有了参数类型的限制在 传参的过程中变得严格,减少了不必要的错误的发生 2. tslint同时也兼备了一部分eslint的作用,在一定程度上我们使用tsl ...

  5. spring cloud深入学习(十)-----配置中心和消息总线(配置中心终结版)

    如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端,当客户端越来越多的时候,需要每个客户端都执行一遍,这种方案就不太适合了.使用 ...

  6. bootstrab table+表格 select可编辑完整实例

    先看下效果图: ============================================================================================ ...

  7. Jmeter设置中文汉化

    下载汉化包logkit-2.0.jar 将汉化包copy至 jmeter文件的lib目录下 打开Jmeter软件,设置汉化包 Options  ->  ChooseLanguage  -> ...

  8. 2019.10.28 csp-s模拟测试91 反思总结

    有一场没一场的233 T1: 胡乱分析一下题意,发现和为n的x个正整数,不同的数字种类不会超过√n个.假设这x个数字都不同,最多也就是(x+1)*x/2=n. 所以可以维护现有的size值以及对应的数 ...

  9. webService学习五(插入片,---监控方法)

    WS Explorer工具的使用: 1- web服务浏览器 2-将对应的路径copy到这里 - 3- 4-- 5-- 6--请求的数据: 7--相应数据 二.使用TCP/IP Monitor-拦截HT ...

  10. 2019-8-8-WPF-非客户区的触摸和鼠标点击响应

    title author date CreateTime categories WPF 非客户区的触摸和鼠标点击响应 lindexi 2019-08-08 16:48:31 +0800 2019-07 ...