白话C++系列(3)-- const关键字
2016-04-09 21:26 Keiven_LY 阅读(1144) 评论(0) 编辑 收藏 举报const关键字
const与基本数据类型
首先,没有const关键字时,我们要定义一个整形变量,其在内存中的情况如下:
int a = 3; //变量
变量名 存储地址 存储内容
a &a 3
当我们在变量名前加上关键字const后,它就由一个变量变成了一个常量,如下:
const int a = 3; //常量
这时如果再对a重新赋值5或者其他值,计算机就会报错,因为此时a是一个常量,不得更改。
变量名 存储地址 存储内容
a &a 3
const与指针类型
几种定义方式与区别:
(1) const int *p = NULL;
(2) int const *p = NULL;
(3) int * const p = NULL;
(4) const int * const p = NULL;
(5) int const * const p = NULL;
注意:(1)与(2)完全等价,(4)与(5)完全等价
例子:
int x =3;
const int *p = &x;
//此时如果 p = &y; 正确,而如果 *p = 5; 错误(因为此时const修饰的是 *p)
int x =3;
int *const p = &x;
//此时如果p = &y; 错误(因为此时const修饰的是p,而p只能指向x)
const int x =3;
const int *const p = &x;
//此时如果p = &y; *p = 5; 都是错误的(因为此时不能用p修改x的值,也不能将p指向其他变量)
const与引用
例子:
int x =3;
const int &y = x;
//x = 10; 正确(因为此时x是一个变量,是可变的)
//y = 20; 错误(因为y作为x的别名,其前面加了const修饰符,不可变)
小结:
(1)const int x =3; x = 5; X(因为此时x是不可变的)
(2)int x = 3; const int y = x; y = 5; X(因为此时y是常量,不可重新赋值)
(3)int x = 3; const int *y = &x; *y = 5; X(因为此时const修饰的是*y)
(4)int x = 3; z =4; int *const y = &x; y = &z; X(因为此时const修饰的是指针y,其指向不可变)
(5)const int x = 3; const int &y = x; y = 5; X(因为此时x是常量,y是x的引用且y也是常量,就不可以再对y重新赋值)
(6)const int x = 3; int *y = &x; X(因为此时x是常量,而指针y是变量,不能将可变指针指向不可变的变量。如果这样做,计算机是有风险的,风险就是可以用*y来修改x的值)
(7)int x = 3; const int *y = &x; √