const T、const T*、T *const、const T&、const T*& 的区别

这些个类型的组合有多种变化,容易产生混淆,这里的T指数据类型,在这里来分析一下这些不同组合的情况和含义。由于本人才疏学浅,不足之处,还请多多指教,大家共同探讨和学习。

  • const T 

所修饰变量的内容不能被修改

  • const T*

所修饰的变量是个指针,这个指针的指向不能被修改;要修改变量的内容,不能够改变指针指向,但可以通过解引用的方式直接赋值

  • T *const

所修饰的变量是个指针,这个指针的内容不能被修改;要修改变量的内容,不能够改变指针的内容,但可以通过改变指针指向来修改

  • T& 、const T&

引用、常引用,常引用一旦指向一个实体,就不能再被指向其它实体

  1. 常引用可以被变量或者引用初始化
  2. 引用不能被常量或者常引用初始化,但变量可以被常引用初始化
  • const T*& 、T*const&

指向常量对象的指针的引用,这可以分两步来理解:

  1. const T*是指向常量的指针;
  2. const T*&指向常量的指针的引用

const T*& 、T*const&相同点:

  • 都是对指针的引用

const T*& 、T*const&不同点:

  • 这个与const T*、T*const类似,只是分别多了个引用和常引用
  • 要修改const T* &所修饰变量的值,因为const T*是个常量指针,所以不能够通过解引用方式直接赋值;但是可以改变引用的对象,原来引用的对象是const T*
  • 要修改T* const &所修饰变量的值,因为这个引用是常引用,所以引用的对象无法改变;但可以通过解引用的方式对其进行赋值

通常情况下,变量可以被常量初始化,但常量不能被变量初始化,但放在引用这里似乎就理解不通了;这就需要从本质上深刻的理解引用,引用是一个实体的别名,它可以代表实体,但它是以实体为主,实体决定引用的属性,反过来引用并不能决定实体的属性;总结一句话就是  实体为主,引用为辅。

举个栗子:假设引用可以被常量初始化,因为它不是常引用,这时你就可以通过修改引用来修改实体,但以实体本身属性为主,所以它不能修改实体;常引用可以被变量初始化,这就是实体为主的例证,引用就像寄生在实体上一般,实体改变,引用虽然是常引用,但是引用为辅。

常引用是指不能通过修改此引用来修改实体的值。

  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值