码迷,mamicode.com
首页 > 编程语言 > 详细

Advance C++ -- const

时间:2015-12-17 22:26:05      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:

这条博客基于Bo Qian的YouTube教学教程总结而成,大家可以在YouTube上找到该教程,这里做一个心得总结。

这部分,总结一下对const的认识:

学过C++的都知道,C++中的const用于修饰常量,也就意味着不可改变,你以为就是这么简单了,但是实际中const可以玩出很多花样:

1.  const int *m ,int* const m 和 int const *m

     其实大家除了第一种写法外,很少用后面两种写法,但是这两种都是合法的C++语法,却和第一种写法有很大的不同。const int *m 表示const修饰m指针指向的int值,也就是该指针指向的int值不可改变。

int i = 9;
const int *m = &i;
//compile error
*m = 10;
// compile success
m++;

int* const m 表示m指针值为const,但是m指向的值不是,还是用代码做个演示

int i = 9;
int * const m = &i;
// compile error
m++;
// compile success
*m = 10;

int const *m看起来好像更加少遇到,其实和const int *m 是一个意思,有一个非常容易记住的规律,const在指针符号*之前,则表示该值为const,否则表示指针为const。

C++中有一个cast特性,表示类型的转换,当然,const也是可以进行cast away的,举个例子,我们定义了const修饰的int值,如果我们想要修改它,也不是没有办法,C++提供了const_cast<>来将变量的const属性去除。

int main(){
      const int i = 9;
      const_cast<int&>(i) = 10;                 
}

但是这种操作方式不被推荐,因为const变量定义的初衷就是不想改变它。而且这种操作也不安全,容易造成很多问题。

那么我们为什么要用const呢?

1. 在设计之初定义const变量,可以在程序开发的过程中避免错误的写入,举个例子,我们在Person对象中定义了人的ID,如果你不想让ID改变,就将其定义为const,这样,如果后续有其他的程序员试图改变该变量,就会报错,这样就很好的起到了保护变量的作用。

2. 读者在看到const修饰的变量时,就知道该变量是不可变,所以起到了self documenting的作用(意思就是代码即注释)。

3.  const变量的定义有利于compiler对程序进行优化,使代码更加紧凑或者是执行的效率更高。很容易理解,const在编译阶段compiler就已经知道,所以可以进行大胆的优化(因为一旦初始化后就不会改变)。

4. const在C++就是read-only memory,可以放到不可读的区域例如ROM中,其实作用和上一条说的差不多,有利于程序的编译运行。

 

下一篇将会介绍const修饰的function,结合C++中的OOP介绍const在成员函数修饰中的巨大作用。

Advance C++ -- const

标签:

原文地址:http://www.cnblogs.com/RookieCoder/p/5055264.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!