C++中的const关键字

const 与变量

const关键字修饰变量,它会在编译期间(时机很重要),告诉编译器这个对象是不能被修改的。
const的作用:他可以保护变量,防止它们被无意的修改。可以优化编译结果,让可执行程序更为紧凑。

合理的使用 const 可以让你写出来的程序更为严谨、健壮,不易出错,乃至于更加高效。

const int* p1 = &i; 
int const* p2 = &i; 

上面这段代码表示指针所指的内容为常量,你不能做 *p1 = 1; 这样的操作,但可以 p1++;

int* const p3 = &i; 
const int* const p4 = &i; 

上面这段代码表示指针为常量,你无法修改 p3,如 p3++;,但你可以执行 *p3 = 1;。最后一行中,p4 和其所指向的内容都是 const 的。

规律:如果 const 在 * 号左边,就表示指针所指的内容是常量,否则指针本身是常量。

const int a=2;
const int &b=a;//正确

int &c=a;//此语句错误 不能用非const引用指向const对象

注意:普通的引用无法绑定到const对象上,只可以读取而不可以修改,这也是const关键字的主要作用。

double a=1;
const int &b=a;

当编译器执行这两句代码时,会完成如下操作:

int t=a;
const int &b=t;

编译器会创建一个int型的暂时变量t存储a,然后将b指向t。

注意:引用在内部存放的是一个对象的地址,它是该对象的别名。对于不可寻址的值,如文字常量,以及不同类型的对象,编译器为了实现引用,必须生成一个临时对象,引用实际上指向该对象,但用户不能访问它。

const 与函数

在一个类中,任何不会修改数据成员的函数都应该声明为const类型。使用const关键字进行说明的成员函数,称为常成员函数。只有常成员函数才有资格操作常量或常对象。 没有使用const关键字说明的成员函数不能用来操作常对象。

int GetCount(void) const;//定义为const成员函数

可以通过给函数添加const来实现函数重载:

#include <iostream>
using namespace std;

class R {
	public:
		R(int r1, int r2) {
			R1=r1;
			R2=r2;
		}
		void print();
		void print() const;
	private:
		int R1, R2;
};
void R::print() {
	cout<<R1;
}
void R::print() const {
	cout<<R2;
}
int main() {
	R a(5, 4);
	a.print();
	const R b(20, 52);
	b.print();
	return 0;
}

其中print成员函数就实现了两个版本,输出结果为 5,52。 const对象默认调用const成员函数。

void function(const int a);

参数指针所指内容为常量不可变。

void function(const int* a);

参数指针本身为常量不可变

void function(int* const a);

参数为引用,为了增加效率同时防止修改。

总结:这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,const禁止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本, 然后传递过去,而const直接传递地址,所以这种传递比按值传递更有效.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值