我是靠谱客的博主 殷勤冷风,最近开发中收集的这篇文章主要介绍C++:const限定符、const 和引用,指针,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

const

const必须初始化,创建后其值无法改变。const 可以用字面值初始化,也可以用一个对象初始化 (对象是否是const无关紧要)。

//如:
int i = 42;
const int j = i;	// 合法
int x = j;
// 合法
默认情况下,const的作用域为本文件。

若想多个文件共享const,则需要在声明和定义处都用 extern 修饰,, (非const 定义处好像可以不用 extern)

const 和 引用

const int ci = 1024;
const int &r1 = ci;	//正确:引用与其对象都是const
r1 = 42;
//不正确:r1是对const的引用
int &r2 =
ci;	//不正确:假设正确,那么可以通过r2修改ci,而ci是const对象

关于初始化:
初始化const引用允许用任意表达式作为初始值,只要能够转化成指定类型即可
允许const引用绑定非const的对象,字面值甚至一个一般表达式
与引用不同。引用必须是引用对象。如:int &xx = 1; //不合法

	int i = 42;
const int &r1 = i;
//合法
const int &r2 = 42;
//合法
const int &r3 = r2 * 2;	//合法
int &r4 = r1 * 2;
//不合法,r2不是const

如下代码:

//注:
int i = 42;
int &r1 = i;
//合法
const int &r2 = i;
//合法
r1 = 0;
//合法
r2 = 0;
//不合法。

故,可知 const 引用不能通过该引用来改变原对象值,但其他途径一样可以改变其值

指针 和 const

要存放常量对象的地址,只能用指向常量的指针

	const double pi = 3.14;
double *ptr = π
//不合法,ptr是普通指针
const double *cptr = π	//合法
*cptr = 42;
//不合法,不能给通过const指针改变值

并没有指定非常量对象,只能用指向非常量的指针:(//与引用类似)

	double dval = 3.14
cptr = &dval;
//合法; 但是不能通过cptr改变dval值,也没有规定不能通过其他路径改变值

const 指针。

	int errNumb = 0;
int *const curErr = &errNumb;	//curErr将一直指向errNumb
const double pi = 3.14159;
const double *const pip = π	//pip是一个指向常量对象的常量指针。

显然,如 const int * 是无法通过指针改变值,而 int *const 是无法改变指针本身
(const int* 和 int const* 是一样的)

测试代码:

#include<iostream>
int main() {
int i = 42;
const int *pi = &i;
//
*pi = 1;
//报错
int j = 0;
pi = &j;
//不报错
int *const pj = &j;
//
pj = &i;
//报错
*pj = 1;
//不报错
std::cout << j << std::endl;
return 0;
}

最后

以上就是殷勤冷风为你收集整理的C++:const限定符、const 和引用,指针的全部内容,希望文章能够帮你解决C++:const限定符、const 和引用,指针所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部