C++中const

 C和C++都有const这个关键字,虽然有相似,但是也有不同。

const 在 C++ 与 C 中的不同
1、C 中被 const 所修饰的叫做常变量,(被修饰的内容不可做左值。

2、C++ 中被const 所修饰的内容叫做常量,

(1)必须初始化
(2)不允许普通的指针指向,只能用const类型的指针指向

  举例来说:

const int a=10;

int *p=&a;

*p=20;

这几行代码在C中是没有问题的,但是在c++中是错误的,因为C++中的constt所修饰的内容是不允许普通指针指向的。

另外,当const 修饰的是全局变量时,该全局符号会具有 local 属性,只在本文件可见,从而可能出错,所以,我们需要在前面再加个 extern 关键字。(将local属性的符号变成global 属性)

 C++中const和一级指针的结合
一级指针和const的结合较为简单,前边好像写过了,可以去看看

 

/*
    int  a = 10;
    const int* p = &a;
      const int* q = p;
*/

/*      int  a = 10;
    int* p = &a;
    int* q = p;*/
/*
    const int  a = 10;
    const int* p = &a; 
    const int* q = p;  

*/

  /*  int a = 10;
    int* const p = &a;
    int* q = p;*/
/*    int  a = 10;
    int* p = &a;
    const int* q = p;*/

C++中const和二级指针的结合
我们分析一下这句代码:

    int a = 10;
    int* p = &a;
    const int**q = &p;

从C语言的权限不能扩大传递来看,最后一个语句,左边是 const int **类型,右边是 int** 类型,权限明显是缩小传递的,但确是错的

因为该语句执行时,编译器认为对 q 而言,**q 的值是一个常量,不能被修改。而当我们把非 const 地址(&p)赋给 const 指针(q),存在隐藏的风险,我们有可能通过 p 来修改这个 const 数据(**q),const int **q 并不代表着它指向的是一个常量,**q指向的a只是个 int 类型。它只意味在这一条语句中对 q 而言,**q是个常量。你可以通过给 a 赋值来改变 a的值,但你不可以通过 q 去改变 a 的值。所以这条语句是错误的。把该句改为 const int *const* = &p;即可。或者 const int* p = &a;

其他情况先不分析了:


C++中const和引用的结合

引用传入
    引用是一个别名 
    底层处理:
        C++中和指针处理方式相同,在用到引用变量的地方  系统会自动来解引用
    引用的特点
    1.必须要初始化
    2.引用初始化的变量一定要可以取地址    
    3.引用是不可改变
    4.引用只能访问引用变量所引用的内存单元。

 

常引用引用立即数:

(1)立即数放到临时量中

(2)常引用来引用临时量

引用做形参:

(1)引用修改实参的值

(2)引用不能引用立即数,部分实参无法访问

不能反回局部变量的地址或引用

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值