代码改变世界

白话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;