Z03 C++中const的通常用法

1、指针与const

可以用两种不同的方式将const关键字用于指针。第一种方法是让指针指向一个常量对象,这样可以防止使用该指针来修改所指向的值。第二种方法是将指针本身声明为常量,这样可以防止改变指针指向的位置。

1)指针指向一个常量对象

#include <iostream>
using namespace std;


int main(void)
{
	int age = 29;
	const int * pt = &age;
	*pt = 30; 
	//注意:第8行,程序报错,不能给常量赋值
	cout << "age: " << age << endl;
	system("pause");
	return 0;
}
说明:程序中pt指向const int(此处为29),因此不能用pt来修改这个值。但是,pt的声明并不意味着它指向的实际上就是一个常量,而只是意味着对于pt而言,这个值是常量,可以通过修改age变量来修改age的值,如下所示:
#include <iostream>
using namespace std;

int main(void)
{
	int age = 29;
	const int * pt = &age;
	age = 30;
	//注意:第8行,程序不会报错。
	cout << "age: " << age << endl;
	system("pause");
	return 0;
}
说明:C++中const变量的地址可以赋给const变量的指针,此时age的值既不能通过age变量修改也不能通过pt来修改,如下所示:

#include <iostream>
using namespace std;

int main(void)
{
	const int age = 29;
	const int * pt = &age;
	age = 30;
	//注意:第8行,程序报错,const变量的地址可以赋给const变量的指针。
	cout << "age: " << age << endl;
	system("pause");
	return 0;
}
使用const的理由:

  • 可以避免由于无意间修改数据而导致的编译错误;
  • 使用const使得函数能够处理const和非const实参,否则将只能接受非const数据。如果条件允许,应将指针形参声明为指向const的指针。
2)指针本身声明为常量
#include <iostream>
using namespace std;

int main(void)
{
	int age = 29;
	const int * pt = &age;
	int height = 30;
	pt = &height;
	cout << *pt << endl;
	//注意:*pt输出为30
	cout << "age: " << age << endl;
	system("pause");
	return 0;
}
说明:开始时pt指向const int使得pt不能修改age的值,但是如上程序不能防止修改pt的值,当pt为&height时,*pt的值为30,即此时pt不能修改height的值。

若使pt的值也不能改变,应使用下面声明,此时pt的值不能改变切pt指向的值也不能改变:

#include <iostream>
using namespace std;

int main(void)
{
	int age = 29;
	const int *  const pt = &age; //使用这种结构
	int height = 30;
	pt = &height;
	//注意:第9行,程序报错
	cout << "age: " << age << endl;
	system("pause");
	return 0;
}


2、为何将const用于返回类型的引用

const free_throws& accumulate(free_throws& target, const free_throws& source)
说明:返回类型使用const引用后不允许给accumulate()类似赋值操作,如下所示

accumulate(参数1, 参数2) = four; //不允许修改accumulate()


3、const为类成员函数

const Stack land = Stack("ABC")
land.show();
说明:对于类Stack声明为const后,第二行show()的原型为void show()代码会编译错误,因为show()的代码无法确保调用对象不被修改。要保证不出现错误,则一种方法是将const加载show()函数后面,如下所示:

void show() const;

原理如下:

a、当类对象时const时表示对象不能修改,而当其调用成员函数时non-const时,成员函数表明可以修改对象。两者发生矛盾,所以不予许出现这种现象;

b、如果当成员函数的const和non-const版本同时存在,const object只能调用const member functions,non-const object 只能调用non-const member functions。


4、this指针的const用法

const Stock& topval(const Stock& s) const;
说明:程序中类为Stock,topval()为比较两个Stock对象,其中第一个const为返回const引用,第二个const表明,该函数不会修改被显式地访问的对象 s。最后一个const表明,该函数不会修改被隐式地访问的对象 this。因此返回类型为第一个const 引用。








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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值