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

const

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

复制代码
1
2
3
4
5
6
//如: int i = 42; const int j = i; // 合法 int x = j; // 合法
默认情况下,const的作用域为本文件。

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

const 和 引用

复制代码
1
2
3
4
5
6
7
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; //不合法

复制代码
1
2
3
4
5
6
7
8
9
int i = 42; const int &r1 = i; //合法 const int &r2 = 42; //合法 const int &r3 = r2 * 2; //合法 int &r4 = r1 * 2; //不合法,r2不是const

如下代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
//注: int i = 42; int &r1 = i; //合法 const int &r2 = i; //合法 r1 = 0; //合法 r2 = 0; //不合法。

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

指针 和 const

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

复制代码
1
2
3
4
5
6
7
const double pi = 3.14; double *ptr = π //不合法,ptr是普通指针 const double *cptr = π //合法 *cptr = 42; //不合法,不能给通过const指针改变值

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

复制代码
1
2
3
4
double dval = 3.14 cptr = &dval; //合法; 但是不能通过cptr改变dval值,也没有规定不能通过其他路径改变值

const 指针。

复制代码
1
2
3
4
5
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* 是一样的)

测试代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部