我们忽略掉了相同类型(修饰符都一样)是否可以赋值的情况(我到现在的学习里都还可以相互赋值),以及类型兼容的情况。只考虑const、&、*等修饰符带来的影响(本来发过一篇,但不全面还有点绕,所以重写了)
类型兼容:
const:
前置const:
前置const写在其他修饰符前面,也就是距离变量较远的地方
后置const:
指针:
const type *ptr
此ptr 认为 自己指向的是一个常量,不能改变所指对象的值,但还是可以释放掉内存,该ptr也是一个变量(左值),可以进行赋值,但不能让它赋值给无const修饰的同类型的指针
type *const ptr
该ptr是常量(右值), 不接受赋值,ptr现在也变成了const常量
(无const修饰)引用:
const type &temp = variate
variate可以是常量,也可以是变量,temp不能改变
(const type &temp 可以绑定右值,但是右值不一定都是const类型,这样绑定后可能会使得temp失去原来右值的部分功能)
type & const temp = variate
应该会报错,从temp往左看,const说明temp是常量无法被赋值,&说明要绑定一个左值,两者自相矛盾
原文:https://www.cnblogs.com/Liberavi/p/11767357.html