C++ const 限定符 const的引用 const指针详解

4 篇文章 0 订阅
2 篇文章 0 订阅

1. const 限定符

目的和作用:定义不能改变的量,称之为常量,且必须初始化

初始化和const

  1. 可以用非const对象初始化const对象。
  2. const对象仅在文件内有效,在编译过程中,用到该变量的地方,会被替换成对应的值。
  3. const变量默认不能被其他文件访问,非要访问,必须在指定const变量定义之前加extern。

1.1. const的引用

  1. 可以把引用绑定的const对象上,称之为对常量的引用。可以读取但是不能修改绑定对象的值。引用类型必须是const 类型。const int &r1 = ci;
  2. 引用必须在定义时初始化,且不能改变与绑定对象的关系。
  3. reference to const(对常量的引用):指向const对象的引用,如 const int ival=1; const int &refVal = ival;,可以读取但不能修改refVal。
  4. 引用类型有两种情况可以与绑定对象类型不一致。其一:常量引用可以绑定到可以转换至引用类型的不同类型对象上。
  5. 临时量(temporary)对象:当编译器需要一个空间来暂存表达式的求值结果时,临时创建的一个未命名的对象。
  6. 对临时量的引用是非法行为。
  7. const引用可以绑定非const对象。但是不允许改变绑定对象的值。可以通过其他方式改变绑定对象的值。
    int i = 42; const int &r = i; i = 45;//合法 r = 46;//非法

1.2 指针和const

  1. 指针是对象,允许把指针定义成常量。想要存放常量对象的地址,只能用指向常量的指针。
    const double pi = 3.14; const double *cptr = π//合法
  2. 指针类型必须与所指向对象类型一致,但是有两种意外。第一种:允许常量指针指向非常量对象,不能通过指针改变非常量的值。
    int i = 42; const int *r = &i; i = 45;//合法 *r = 46;//非法
  3. 允许把指针定义成常量。指针存放的地址不能被改变,地址里的内容可以通过其他方式改变。

1.3顶层const

  1. 顶层const:指针本身是个常量。
  2. 底层const:指针指向的对象是个常量。拷贝时严格要求相同的底层const资格。

1.4 constexpr和常量表达式

  1. 常量表达式:指值不会改变,且在编译过程中就能得到计算结果的表达式。
  2. C++11新标准规定,允许将变量声明为constexpr类型以便由编译器来验证变量的值是否是一个常量的表达式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值