指针、引用、const

 

引用:

1. 引用必须被初始化,初始化完成以后,引用就和初始值对象一直绑定在一起,无法令其重新绑定到另外一个对象。

2. 引用与指针不同,不属于对象的范畴(不属于对象,所以没有实际的地址,不能定义指向引用的指针),它只是为一个已经存在的对象所起的另外一个名字。不能定义指向引用的指针,因为引用不是对象,没有实际地址

3. 一般来说,引用的类型都要和与之绑定的对象严格匹配,而且,引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起。但是,存在以下两种例外情况:1,初始化常量引用时允许用任意表达式作为初始值,只要该表达式的结果能转换成引用的类型即可。尤其,允许为一个常量引用绑定非常量的对象、字面值,甚至是个一般表达式。2,可以将基类的引用(或指针)绑定到派生类的对象上。所以,当使用基类的引用(或指针)时,该对象可能是基类的对象,也有可能是派生类的对象。

void指针:

void*是一种特殊的指针类型,可以存放任意对象的地址。所以我们对该地址中到底是什么对象并不了解。注:不能直接操作void*指针所指的对象。

 

 

 

指向指针的引用:

 

从右往左读,首先r是一个引用,*则说明了r引用的是一个指针。

 

 

 

const小结:

const对象一旦创建后值就不会再发生变化,所以const对象必须初始化。

 

 

 

区别常量指针和指向常量的指针

 

1.const指针:

指针是对象而引用不是,因此就像其他对象类型一样,允许把指针本身定位常量。常量指针必须初始化,而且一旦初始化完成,则它的值(也就是存放在指针中的那个地址)就不能再改变了。把*放在const关键字之前用以说明指针是一个常量,这样的书写形式隐含着一层意味,即不变的是指针本身的值(地址)而非指向的那个值。

 

 

 

2.指向常量的指针:

指向常量的指针不能用于改变其所指对象的值。但是,和常量引用一样,指向常量的指针也没有规定其所指的对象必须是一个常量。所谓指向常量的指针仅仅要求不能通过该指针改变对象的值,而没有规定那个对象的值不能通过其他途径改变。其实就是只能管住自己罢了。

常量引用(和指向常量的指针类似):

顶层const和底层const:

  指针具有特殊性,指针本身是一个对象,它又可以指向另外一个对象。所以,指针本身是不是常量以及指针所指的是不是一个常量就是两个相互独立的问题。顶层const:指针本身是一个常量,即指针所指向的地址不能发生变化。底层const:指针所指的对象是一个常量,即指针所指的值不能发生变化。(仅仅是不通过这个指针发生变化,万一有一个非指向常量的指针同时也指向这个对象,则对象的值还是会发生变化)

  当执行对象的拷贝操作时,常量是顶层const还是底层const区别明显。其中,顶层const不受什么影响。因为顶层代表的地址不发生改变,与值没有多大关系。 另一方面,底层const的限制却不能忽视。当执行对象的拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格,或者两个对象的数据类型能够转换。例如普通的int&不能绑定到int常量上(因为int类型的常量想变就变),const int&可以绑定到一个普通int上。

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值