首页 > 其他 > 详细

const关键字

时间:2015-02-18 17:40:20      阅读:328      评论:0      收藏:0      [点我收藏+]

const一般的意义是 ,恒定不变,修饰的对象不能改变,或是为了保护数据,提高了程序额健壮性。分类如下:

常变量: const 类型说明符 变量名

常引用: const 类型说明符 &引用名

常对象: 类名 const 对象名

常成员函数: 类名::fun(形参) const

常数组: 类型说明符 const 数组名[大小]

常指针: const 类型说明符指针名 ,类型说明符* const 指针名

首先提示的是:在常变量(const 类型说明符 变量名)、常引用(const 类型说明符 &引用名)、常对象(类名const 对象名)、 常数组(类型说明符 const 数组名[大小]), const” 与 “类型说明符”或“类名”(其实类名是一种自定义的类型说明符) 的位置可以互换。如:

const int a=5; 与 int const a=5; 等同

类名 const 对象名 与 const 类名 对象名 等同

用法1:常量

取代了中的宏定义,声明时必须进行初始化(!c++类中则不然)。const限制了常量的使用方式,并没有描述常量应该如何分配。如果编译器知道了某const 的所有使用,它甚至可以不为该const 分配空间。最简单的常见情况就是常量的值在编译时已知,而且不需要分配存储。―《C++ Program Language

const 声明的变量虽然增加了分配空间,但是可以保证类型安全。

标准中,const 定义的常量是全局的,C++中视声明位置而定。

用法2:指针和常量

使用指针时涉及到两个对象:该指针本身和被它所指的对象。将一个指针的声明用const“预先固定”将使那个对象而不是使这个指针成为常量。要将指针本身而不是被指对象声明为常量,必须使用声明运算符*const

所以出现在 之前的const 是作为基础类型的一部分:

char *const cp; //char const 指针

char const *pc1; //const char 的指针

const char *pc2; //const char 的指针(后两个声明是等同的)

从右向左读的记忆方式:

cp is a const pointer to char. pc 不能指向别的字符串,但可以修改其指向的字符串的内容

pc2 is a pointer to const char. *pc2 的内容不可以改变,但pc2 可以指向别的字符串

且注意:允许把非 const 对象的地址赋给指向 const 对象的指针,不允许把一个 const 对象的地址赋给一个普通的、非 const 对象的指针。

用法3const 修饰函数传入参数

将函数传入参数声明为const,以指明使用这种参数仅仅是为了效率的原因,而不是想让调用函数能够修改对象的值。同理,将指针参数声明为const,函数将不修改由这个参数所指的对象。

通常修饰指针参数和引用参数:

void Fun( const A *in); //修饰指针型传入参数

void Fun(const A &in); //修饰引用型传入参数

用法4:修饰函数返回值

可以阻止用户修改返回值。返回值也要相应的付给一个常量或常指针。

用法5const 修饰成员函数(c++特性)

const 对象只能访问const 成员函数,而非const 对象可以访问任意的成员函数,包括const 成员函数;

const 对象的成员是不能修改的,而通过指针维护的对象确实可以修改的;

const 成员函数不可以修改对象的数据,不管对象是否具有const 性质。编译时以是否修改成员数据为依据进行检查。

 

使用建议:

要大胆的使用const,这将给你带来无尽的益处,但前提是你必须搞清楚原委;

要避免最一般的赋值操作错误,如将const变量赋值,具体可见思考题;

在参数中使用const应该使用引用或指针,而不是一般的对象实例,原因同上;

4 const在成员函数中的三种用法(参数、返回值、函数)要很好的使用;

不要轻易的将函数的返回值类型定为const;

6除了重载操作符外一般不要将返回值类型定为对某个对象的const引用;

7任何不会修改数据成员的函数都应该声明为const 类型。

 

const的最主要功能是保护数据, 另外使用const引用还能提高函数运行效率,减少复制实参开销!

const关键字

原文:http://blog.csdn.net/zzucsliang/article/details/43877321

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!