学习C++——const的用法

一、指针和const

1、让指针指向一个常量对象,这样可以防止使用该指针来修改所指向的值。

int age = 33;
const int * page = &age;
声明 了一个指向常量的指针page,不能使用page来修改age的值,但是可以通过age来修改它的值。age的值对于page来说是一个常量,但是age本身并不是一个常量。

2、将指针本身声明为常量,这样可以防止改变指针指向的位置。

int book = 12;
const int * p1 = &book;//第一种方法中,指向常量的指针
int * const p2 = &book;//第二种方法中,指向整数的常量指针,此时指针是一个常量。
备注:
禁止修改P1指向的值,即*P1=22是非法的。但是P1可以指向另外一个变量,即P1 = &age是合法的。
可以用P2来修改指向的值,即*P2=22是合法的。但是P1不可以指向另外一个变量,即P2=&age是非法的。

二、临时变量、引用参数和const

1、什么时候将创建临时变量

如果引用参数是const,则编译器将在下面两种情况下生成临时变量。
第一:实参的类型正确,但不是左值。
第二:实参的类型不正确,但可以转换为正确的类型。
备注:
左值参数是可以被引用的数据对象,例如:变量,数组元素,结构成员,引用和解除引用的指针都是左值。现在, 常规变量和const变量都可视为左值,因为可以通过地址访问它们,但是常规变量是可以修改的左值,const变量是不可以修改的左值。

2、应尽可能使用const

将引用参数声明为常量的引用的好处:
  • 使用const可以避免无意中修改数据的编译错误
  • 使用const使函数能够处理const和非const实参,否则只能接受非const数据。
  • 使用const引用使函数能够正确生成并使用临时变量。
void display (const   free_struct  &  ft);//不能修改传入的结构

三、const成员函数

如果类方法不修改调用的对象,就将其声明为const,则该函数被称为const成员函数。
void stock::show() const
此时是将this是一个指向const的指针,*this是const对象,不能改变该对象的值。this是隐式的参数。
有时候会想通过const成员函数,改变一个非const变量。唯一的办法是在声明变量之前加上关键字mutable
形式为:mutable  int  cnt;定义了变量cnt,它可以通过const成员函数改变其值。

  • 一个const成员函数如果以引用的形式返回*this,那么它的返回类型将是常量引用。

四、基于const的重载

class Screen
{
private:
	void do_display(std::ostream & os) const { os << contents; }
public:
	//根据对象是否是const重载display函数。
	//如果是const对象则调用常量版本,如果不是const对象则调用非常量版本
	Screen &display(std::ostream & os)
		{do_display(os); return *this;}
	const Screen &display(std::ostream & os) const
		{do_display(os); return *this;}
};






待续......

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值