const常量

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将保持到引用的生命期结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值