读书人

关于const关键字的一些有关问题c++

发布时间: 2012-05-24 11:55:41 作者: rapoo

关于const关键字的一些问题,c++
const CRect &GetInvalidRect() const { return InvalidRect; }

这是一个类成员函数,解释一下第一个const和第一个const各有什么作用,那个在函数名前面的&又有什么用,2个const与&是独立起作用的么。




[解决办法]
const CRect &GetInvalidRect() const

前面的const CRect &,表示该成员函数返回的数据类型是一个CRect常引用。
后面的const,表示该成员函数不能修改类中的成员变量(用mutable修饰过的成员变量除外)。
[解决办法]
1、const CRect &GetInvalidRect() const { return InvalidRect; }
const修饰谁,谁就不能改变。第一个const表示返回的CRect不能改变;第二个参数表示函数内部的成员变量不能改变,也就是说非const成员函数都不能调用,即使你的非const成员函数不改变成员变量,编译器也会认为你可能改变而通不过;&表示返回CRect是返回值本身,而不是返回值的一个副本,也就是不会调用CRect的拷贝构造函数。

2、static const CRect Position[]
static表示静态的,创建的Position[]会一直存在静态存储区里,你每次改变它的值,它都保存你改变之后的值;const表示你的CRect不能修改。所以你的Position数组保持初始化的值不能改变,而且一直存在静态存储区,因此,你的Position数组是只读的。

3、void Invalidate(const CRect &rect) { InvalidRect |= rect; }
这句话分析就参考上面的,const表示参数rect在函数内部不能改变;&表示rect传递的是CRect本身,而不是它的一个副本。

读书人网 >C++

热点推荐