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
7const 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
9int 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
7const double pi = 3.14; double *ptr = π //不合法,ptr是普通指针 const double *cptr = π //合法 *cptr = 42; //不合法,不能给通过const指针改变值
并没有指定非常量对象,只能用指向非常量的指针:(//与引用类似)
复制代码
1
2
3
4double dval = 3.14 cptr = &dval; //合法; 但是不能通过cptr改变dval值,也没有规定不能通过其他路径改变值
const 指针。
复制代码
1
2
3
4
5int 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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复