C++中const用法的总结

本文详细介绍了C++中const关键字的多种用途,包括定义常量、在函数中使用const、与指针及引用结合使用等场景。通过具体示例帮助读者更好地理解和掌握const的正确用法。

C++中的const是一个很烦人的东西,其用法比较多样化,比如说在声明变量的时候既可以放在前面,也可以放在后面。且与之相关一些概念往往容易使人混淆,使用的时候很容易出错。于是重翻了《C++ Primer》,总结一下const的各种用法。

1.定义常量

const最常见的用法,将一个变量声明为const型,则其值不能再被更改。有如下两种定义方式:

const int var1 = 12;
int const var2 = 13;

第一种更为常见,此外还有两点要注意:
1)const量在声明的时候必须初始化
2)const对象默认为文件的局部变量,若要使其具有全局可见性,需要在声明的时候加上extern。


2.在函数中使用const

有以下三种用法:
1)const修饰函数参数:

void List(const List & alist);

参数不会被函数所更改,由于C++是的参数是值传递的,普通变量通常也不会被更改,因此通常是和引用配合使用。
2)const修饰函数返回值:

const int func(int arg1, int arg2);

和修饰变量是一样的,比较少见的用法。
3)const修饰类的成员函数

void display(ostream & out) const;

const修饰的成员函数不会更改其对象的数据成员,


3.const与指针

const与指针混用是const用法中最容易混淆的部分,厘清的关键在于区分清楚const修饰的是指针本身还是指针所指的对象。
1)指向const对象的指针
声明方式为:

int var1 = 12;
const int *p = var1;
*p = 15; // error: p could not change var1

这一类指针无法更改其所指向对象的值。就上面的例子来说,更改*p,比如对其赋值,是非法的。不过这个例子一个有意思的地方在于var1本身并不是const的,也就是说,虽然通过指针p不能更改var1的值,但其他方法还是可以的,比如直接对var1赋值,那么*p其实也被改变了。
对这一现象,《C++ Primer》中有个精到的描述:“指向const对象的指针可以被理解为自以为指向const对象的指针”。
2)const指针
另一种情况是const修饰的是指针本身:

int var1 = 12;
int var2 = 13;
int const *p = var1;
p = var2; // error: p could not be changed
*p = 15; // change *p is ok

这种情况下指针本身是不能改变的,但是指针所指向的对象却可以修改


4 .const引用

const引用通常代表的含义是指向const对象的引用,也就是说它和以上指针的第一种情况类似(虽然名字和第二种类似),同样它也是“自以为”的,并不能保证对象绝对不会被修改。
const引用通常用于作函数的参数,因为引用作为参数传递效率会更高,但引用会造成参数被更改,因此可以用const修饰。

转载于:https://my.oschina.net/jerryone/blog/70322

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值