const常量

来源:互联网 发布:网络借贷利息是多少 编辑:程序博客网 时间:2024/04/20 16:26

2.5.1 常量的定义
变量其实就中是程序在运行过程其值可以改变的内存单元的名字,但是常量就是在程序执行过程中其值固定不变的内存单元的名字,在c++中常用const修饰符定义常量,方法如下:
const 常量类型 常量名=常量值;
说明:
1.const常量必须在定义时初始化,而且一经定义不能在更改(常量名不能出现在=的左边)
2.在c++中,表达式可以出现在常量定义语句中,如果常量是整型,int可以省。
例如:
int j,i,k=9;
const i1=10+k+6;
当常量定义语句中出现表达式时,c++首先计算表达式的值,然后把计算结果在进行赋值;
3.c++中仍然可以使用#define定义常量,但是#define采用宏代换方式进行常量的处理,不具有检查机构,存在不安全性。

2.5.2 const与指针
const可与指针结合,可以分为三种情况
1. typedef *const p const–p:常量指针,即指针是常量,不能被修改,但是其所指的内存区域是变量,可以修改;
2. typedef const *p
const typedef *p const–*p:常量的指针,指针是变量,可以在指向其他内存单元,但是其指的单元是常量,不能在修改;
3. const typedef const *p const-p const-*p:指向常量的常量指针,指针及其所指的内存单元都是常量,都不能被修改。

这里写图片描述
这里写图片描述

const对指针和变量之间的相互赋值有一定的影响,const对象的地址只能赋给指向const对象的指针,指向const对象的指针可以被赋予一个非const对象的地址,否则会引起编译错误;

#include <iostream>using namespace std;int main(){  int x=9;  const int y=9;  int *p1;  const int *p2;  p1=&y;//错误,若改成p2=&y,则正确,或者把p1改成p2也正确  p2=&x;}

2.5.3 指针与引用

1.在定义引用时,可以用const对其进行修饰,使其成为不被允许修改的常量引用

#include <iostream>using namespace std;int main(){    int i=9;    int & rr=i;    const int &ir=i;    rr=8;//这时也会修改原对象和引用的值    ir=7;//错误,ir是const引用,不能通过他修改对应变量的值}

这里写图片描述
在定义了const引用时,不可以通过改变对应变量的值,但是可以通过其他非const引用来改变对应的值。
2. const引用可以用常量来初始化,但是非const引用不可以用常量初始化,例如:

#include <iostream>using namespace std;int main(){   int i=2;   const double &ff=10.0;//zzheng正确   const int &ir=i+10;   int &ir=5;//cuowu错误}

第二三句正确的原因与编译器处理方式有关系,编译器在实现常量引用是生成一个临时对象,然后让这个引用指向这个对象,但是对
用户而言这个对象是不可知的。编译器首先产生不为用户所知的临时变量temp,然后将引用指向它,temp将保持到引用的生命期结束。

0 0
原创粉丝点击