C++:指向常量的指针,常量指针,指向常量的常量指针:初始化区别 以及const的引用情况

指针类型的初始化或赋值,(不存在特例的情况下)对象类型都应该严格匹配
如下的初始化是或的关系,每次只存在一个初始化,因为方便比较

指向常量的指针可以初始化被同类型的常量和同类型非常量,因为是一个指针的特列,可以指向同类型非常量如下,如果要存放常量对象的地址,只能使用指向常量的指针

	int  i = 42;
	const int h = 0;
    double x = 3.0;
	const int  *b =&i ;//正确
	const int  *b =&h ;//正确	
    const int  *b =&x ;//错误

常量指针初始化对象类型必须一致,*修饰符是声明符的一部分,所以在常量指针种,类型是 int ,:

	int  i = 42;
	const int h = 0;
    double x = 3.0;
	int  *const b =&i ;//正确
	int  *const b =&h ;//错误,h是const int 类型,不能赋值给常量指针int类型,因为不是特列且不匹配
  	int  *const b =&x ;//错误,完全不匹配

指向常量的常量指针 *修饰符是声明符的一部分,所以类型是 const int ,但这类型有含有指向常量的意思(也就是含有指向常量的指针 这层意思)所以也允许被同类型非常量初始化如下:

	int  i = 42;
	const int h = 0;
	double x = 3.0;
    const int *const b = &i;//正确,如描述所说 同类型非常量
    const int *const b = &h;//正确同类型常量
    const int *const b = &x;//错误

const的引用情况,首先引用的类型必须与其所引用的对象类型一直,但存在特列:初始化常量引用允许用任意表达式作为初始值:非常量对象,字面值,甚至一般表达式,如下:

	int  i = 42;
	const int i1=60;
	double a = 3.14;
	
	const int &r1 = i;// 正确  同类型非常量
	const int &r1 = i1// 正确  同类型常量
	const int &r2 = 42;//正确,字面值
	const int &r3 = r1*42;//正确,表达式
	const int &r4 = a;//正确,任意非常量对象
	int &r5 = i1; //普通引用,类型必须一致,不存在特列

用于声明引用的const都是 底层const;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值