C++系列——const,引用,指针用法小结

1. const

将变量设置为只读,任何对其进行的写操作(如赋值),都会导致编译错误。


2. 引用

引用(复合类型)就是对象的另外一个名字。

关于定义引用几点要求:

a. 定义引用的时候,必须初始化(指定引用指向对象的唯一方法)。非法情况:int &ref;

b. 初始化引用的时候,必须是一个其他类型的对象。非法情况:int &ref=10;

c. 正确形式:int val = 10; int &ref = val; (接下来,ref就是val的外号了,而且是从一而终,可以说val和ref就是你中有我,我中有你了^ ^。p.s. 多么纯粹而和谐的关系呀!)

d. 非const引用只能绑定到与该引用同类型的对象;const引用则可以绑定到不同但相关类型的对象。

eg. double dval = 3.14; 
    const int &ref = dval; //合法 (编译器会自动生成一个中间变量:int temp = dval; const int &ref = temp;)
    int &ref2 = dval; //不合法

3. 指针和const

(指向const对象的指针 & const指针)

[指向const对象的指针]

定义方式:

const int * ptr;// int const * ptr 表示同样的意思(指向常量整形的指针ptr)

“自以为指向const对象的指针”:自以为,说的是该指针可以指向const对象,也可以不指向const对象。但是有一点是明确的,不管指向的是不是const对象,都不能通过该指针来试图改变所指向的对象。

为什么这么设计呢?

1. c++强制要求指向const对象的指针必须具有const特性。也就是说这里的const限定的是该指针所指向对象的类型,而并非指针本身,也就说是说该指针指向的对象是可以改变的。

2. 因为编译器并不能确定指向const对象的指针,指向的到底是不是一个const对象,所以统一按照const对象来处理。


[const指针]

定义方式:

int val = 9;
int *const ptr = & val;

"“本身是const类型的指针”:指针本身的值(代表的地址)不能被修改,也即,指针不能指向其他类型的对象。所以必须在定义时必须初始化!

注:以上二种可以组合起来,构成指向const对象的const指针(const int * const ptr = &val;)。具体意思,看懂上面的,同理推之即可知。


4. typedef和指针

typedef string *pstring;
const pstring cstr;

cstr表示的是什么意思呢?
答案:指向string类型对象的const指针。

说明:pstring 表示的是指向string类型对象的指针,这里const修饰的这个指针,指定该指针是const类型。

易错:认为翻译过来应该是 const string *cstr,所以认为是指向const类型的string对象。这样子是把typedef表达式当作文本扩展而进行直译了。


5. 指针和引用的区别

指针和引用的区别:

1. 指针指向的对象可以改变,可以指向空;引用则只能指向一个对象,并在初始化的时候就已经指定好了,而且必须在初始化的时候指定。

2. 引用可以看成是被限制使用了的指针,因为对引用的改变也会改变引用所指向的对象。


应用场景:

1. 引用可以起到信息保护的作用,防止引用指向不同的对象。

2. 引用的效率更高,因为引用不能指向空,所以在使用时一般不用对引用进行空值判断;而指针则一般需要进行空值判断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值