C++中const修饰基本数据类型、指针、引用、对象

const修饰基本数据类型

#include <iostream>
using namespace std;

void main(){
	const int a = 1;
	const char b = 'k';
	const float c = 3.14f;
	//a = 2;  
	//b = 'n';
	//c = 1.2f;
}
const修饰基本类型表示这些类型为常量,不能再修改或赋值。还有需要注意的是3.14默认为double类型,如果用float变量保存的话应该写成float c = 3.14f。

const修饰指针

#include <iostream>
using namespace std;

void main(){
	int a = 0;
	int b = 0;
	int c = 0;
	int d = 0;
	const int *p1 =&a;   //指向整形常量的可变指针
	int const * p2 =&b;  //指向整形常量的可变指针
    int * const p3 =&c;  //指向可变整形的常指针
	const int * const p4 =&d;  //指向整形常量的常指针
}
p1所指向的内容为整型常量,所以*p1=2;是错误的。但可以进行p1++这样的操作,也可改变p1的指向
p2跟p1一样只是表现形式不同,同样的*p2=2;是错误的。但可以进行p2++这样的操作,也可改变p2的指向
p3是常指针,p3本身不能变化,不能改变p3的指向,但它所指向的内容可变,*p3=2;是对的
p4是常指针,而且指向的内容是常量,*p4=2;是错的。

判断方法:const在*前说明是指向常量的指针,const在*之后说明指针为常指针。*前后都有const说明指针为指向常量的常指针。

const修饰引用

很多同学跟我一样爱钻牛角尖将const修饰引用与const修饰指针进行对比,是不是const修饰引用也有修饰指针时的四种情况呢?
#include <iostream>
using namespace std;

void main(){
	int a1 = 1;
	int a2 = 1;
	int a3 = 1;
	int a4 = 1;
	const int & b1 = a1;
	int const & b2 = a2;
	int & const b3 = a3;  //提示“qualifiers on reference are ignored”
	const int & const b4 = a4;  //提示“qualifiers on reference are ignored”
}
const int & b1 = a1; 则b1是常量b1++、b1=2都是不可以的,虽然b1是a1的一个别名,但是不能通过b1来修改a1。但是a1不是常量,可以a1=2,b1的值也会跟着改变。
int const & b2 = a2;与第一个是相同的,b2是引用常量,不能通过b2修改a2,但是a2不是常量,可以修改,b2随之改变。
int & const b3 = a3;提示了“qualifiers on reference are ignored”,即对引用的限定符被忽略,所以相当于int & b3 = a3; const没有起作用。
const int & const b4 = a4; 同理实质上与第一种是一样的,相当于const int & b4 = a4;
总结:首先要知道定义引用时就要进行初始化,而且引用不能改变指向。
然后const在&之前表明引用为常引用,不能通过该引用修改值。const在&之后,const不起效果。


const修饰对象

#include <iostream>
using namespace std;

class A {
private:
	int i;
public:
	A(){ i = 0; }
	void set(int n){
		i = n;
	}
	void get() const {
		cout<<"成员变量的值:"<<i<<endl;
	}
};
void main(){
	const A a;
	//a.set(1);
	//a.get();
}

定义一个const对象,const对象企图调用set函数改变成员变量的值,这是不允许的。const对象顾名思义为常对象,所有对象的成员变量不可变。而且const对象也不能调用非const函数,哪怕set函数没有修改成员变量,编译也会出错。而get函数为const函数,所以const对象可以调用get函数。
 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值