const、引用与指针

时间:2023-03-10 07:26:01
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常量矛盾