常量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不是常量
(b) 指针常量
指针常量约束的是指针指向,也就是说p是常量,*p不是常量
下面用代码来说明:
通俗的话讲:指向的对象是变量,但指针不是变量。并不能再改变指向关系。
(c)、指向常量的指针常量,两者均不可做改变
无论是指针还是指向的变量都不可以变化。都是常量!!!
3、const成员函数
调用形式: 类型 函数名 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++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性