C++程序设计之关键字(1) Const

1、C++中const有什么用?

不要一听到const就说是常量,这样给考官一种在和一个外行交谈的感觉。应该说const修饰的内容不可改变就行了, 定义常量只是一种使用方式而已,还有const参数, const数据成员, const成员函数,const返回值等, 被const修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。(参考:http://jingyan.baidu.com/article/c45ad29cfc4a6f051753e2c7.html

       另外,使用const对象可以提高程序的可读性与可维护性。

2、何处用到const限定符?

定义常量、const参数、const数据成员、const成员函数、const返回值。

(1)   定义常量:定义const常量只是const的一种使用方式而已。定义const常量时注意:(1)定义时必须初始化,定义之后就不能被修改;(2)const对象默认为文件的局部变量,在其他文件使用时需要在定义时用extern修饰。

(2)   const参数:非引用形参(指针形参、const形参)、引用形参(const引用形参比非const引用形参更加灵活)。

(3)   const返回值:返回引用。

(4)   const数据成员:const修饰类的数据成员,表示成员常量,不能被修改,同时它只能在初始化列表中赋值。

(5)   const成员函数:a. const成员函数不被允许修改它所在对象的任何一个数据成员,b. const成员函数能够访问对象的const成员,

(参考:http://blog.csdn.net/Eric_Jo/article/details/4138548http://bbs.csdn.net/topics/310007610

3、const、static、const static、static const

常量数据成员:必须在构造函数初始化列表中进行初始化,与类的具体对象相关,不同的对象值可能不同。

静态数据成员:必须在对应的.cpp文件中初始化,不能在类内初始化,与类是相关的,即使没有具体对象也能调用类的静态成员函数与数据成员。

静态常量数据成员:可以在类内进行初始化,也可以在相应的.cpp中初始化,注意:在cpp中给静态常量数据成员变量赋值时,不在需要加static修饰,但const要加,与类和对象相关。

(参考:http://blog.csdn.net/weishan521520/article/details/5897109) 

4、const 与指针

int pi = 10;

const int *p; //指向常对象的指针

int* const p = π // 常指针

 

typedefstring * pstring;

constpstring pi = &s1; //常指针 等价于string * const pi;

(参考:http://www.cnblogs.com/lichkingct/archive/2009/04/21/1440848.html) 

5.const 与dedine

  C中使用的是宏#define定义常量, C++使用更好的const来定义。

区别:

(1)   编译器处理方式不同

define宏是在预处理阶段展开。

const常量是编译运行阶段使用。

(2)   类型和安全检查不同

define宏没有类型,不做任何类型检查,仅仅是展开。

const常量有具体的类型,在编译阶段会执行类型检查。

(3)   存储方式不同

define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。#define不分内存,因为它是预编译指令,编译前进行了宏替换。

const常量会在内存中分配(可以是堆中也可以是栈中)。

(4)   const无法代替宏作为卫哨来防止文件的重复包含。

(由于const定义常量从汇编的角度来看,只是给出了对应的内存地址, 而不是象#define一样给出的是立即数,所以,const定义的常量在程序运行过程中只有一份拷贝,而#define定义的常量在内存中有若干个拷贝。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值