常量const详解

来源:互联网 发布:对于网络诈骗如何处理 编辑:程序博客网 时间:2024/06/05 06:12

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 = 5int 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;
也就是说此函数只允许读操作,不能改变成员变量的值,只能进行一些返回或读出操作。这个作用只要应用于大型程序中,防止某些类函数被别人改动。

0 0
原创粉丝点击