您的位置:首页 > 编程语言 > C语言/C++

常量const详解

2016-04-22 11:26 363 查看
const是C++中的一个关键字,为什么会有const呢?主要是为了弥补因宏define产生的一些语法的错误。众所周知,define就是传统的宏定义,将某些常量赋值给一个变量,但由于宏定义在编译过程中只是单纯的进行赋值替换,并不会对赋值语句进行检查,因此会存在很多潜在的威胁,一旦定义出错,整个调用过程也讲出错。所以C++创始人为了避免这种错误才提出了用const来代替,同时会对所定义的常量进行语法检查。

const主要应用在三个方面:const常量、const指针和const成员函数。

1、const常量

调用形式:const 类型 变量名 = 常量;

每个const常量都必须进行初始化。例子:const int a = 10;a就是一个整型常量;const int b[3] ={1,2,3};b是一个整型数组。因为const常量比较简单,在此我们就不做赘述,只要记得一定要初始化成相同类型的常量即可。

2、const指针

const指针分成以下三种定义:指向常量的指针、指针常量、指向常量的指针常量。

(a)、指向常量的指针也就是说*p是常量,p不是常量

const int a = 1;
const int b = 4;
int c = 6;
const int* p = &a;  //首先必须进行初始化,其次const约束的是*p也就是说,p指向谁,谁就是常量
p = &b;
p = &c; //p并不是常量,可以改变,也就是说p可以指向任意的整型值,但是当p指向这个变量之后,变量将变成常量值,也就是说,此时c应该是常量。
c = 16;  //c是整型变量,所以可变。
*p = 12; //此句不通,因为*p是常量,不能改变


(b) 指针常量

指针常量约束的是指针指向,也就是说p是常量,*p不是常量

下面用代码来说明:

int a = 5;
int b = 6;
int * const p = &a;
//也就是说p指向的变量并不一定是常量,这里的const约束的不是指向的对象而是指针指向
p = &b;  //这条语句并不能通过,因为p的指向不能发生变化,因为指向是常量。
* p = 15;  //可以通过编译,因为*p不是常量


通俗的话讲:指向的对象是变量,但指针不是变量。并不能再改变指向关系。

(c)、指向常量的指针常量,两者均不可做改变

int a = 5;
int b = 6;
int const * const *p = &a;
p = &b;//不能通过编译
* p =10;//不能通过编译


无论是指针还是指向的变量都不可以变化。都是常量!!!

3、const成员函数

调用形式: 类型 函数名 const;

也就是说此函数只允许读操作,不能改变成员变量的值,只能进行一些返回或读出操作。这个作用只要应用于大型程序中,防止某些类函数被别人改动。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++