const的用法,特别是用在函数前面与后面的区别!
2015-03-27 18:02
302 查看
1.用const修饰函数的参数
2用const修饰函数的返回值如果给以“指针传递”方式的函数返回值加const修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const修饰的同类型指针。例如函数
constchar*GetString(void);
如下语句将出现编译错误:
char*str=GetString();
正确的用法是
constchar*str=GetString();
如果函数返回值采用“值传递方式”,由于函数会把返回值复制到外部临时的存储单元中,加const修饰没有任何价值。
例如不要把函数intGetInt(void)写成constintGetInt(void)。
同理不要把函数AGetA(void)写成constAGetA(void),其中A为用户自定义的数据类型。
如果返回值不是内部数据类型,将函数AGetA(void)改写为constA&GetA(void)的确能提高效率。但此时千万千万要小心,一定要搞清楚函数究竟是想返回一个对象的“拷贝”还是仅返回“别名”就可以了,否则程序会出错。
函数返回值采用“引用传递”的场合并不多,这种方式一般只出现在类的赋值函数中,目的是为了实现链式表达。
classA
{
A&operate=(constA&other);//赋值函数
};
Aa,b,c;//a,b,c为A的对象a=b=c;//正常的链式赋值
(a=b)=c;//不正常的链式赋值,但合法
如果将赋值函数的返回值加const修饰,那么该返回值的内容不允许被改动。上例中,语句a=b=c仍然正确,但是语句(a=b)=c则是非法的。3const成员函数任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。以下程序中,类stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。编译器将指出GetCount函数中的错误。
classStack
{
public:
voidPush(intelem);
intPop(void);
intGetCount(void)const;//const成员函数
private:
intm_num;
intm_data[100];
};
intStack::GetCount(void)const
{
++m_num;//编译错误,企图修改数据成员m_num
Pop();//编译错误,企图调用非const函数
returnm_num;
}
const成员函数的声明看起来怪怪的:const关键字只能放在函数声明的尾部,大概是因为其它地方都已经被占用了。
关于Const函数的几点规则:a.const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数.
b.const对象的成员是不可修改的,然而const对象通过指针维护的对象却是可以修改的.
c.const成员函数不可以修改对象的数据,不管对象是否具有const性质.它在编译时,以是否修改成员数据为依据,进行检查.
e.然而加上mutable修饰符的数据成员,对于任何情况下通过任何手段都可修改,自然此时的const成员函数是可以修改它的
一个函数
AcGePoint3dstartPoint()const;
const放在后面跟前面有区别么
准确的说const是修饰this指向的对象的
譬如,我们定义了
classA{
public:
f(int);
};
这里f函数其实有两个参数,第一个是A*constthis,另一个才是int类型的参数
如果我们不想f函数改变参数的值,可以把函数原型改为f(constint),但如果我们不允许f改变this指向的对象呢?因为this是隐含参数,const没法直接修饰它,就加在函数的后面了,表示this的类型是constA*constthis。
const修饰*this是本质,至于说“表示该成员函数不会修改类的数据。否则会编译报错”之类的说法只是一个现象,根源就是因为*this是const类型的
相关文章推荐
- const的用法,特别是用在函数前面与后面的区别!
- const的用法,特别是用在函数前面与后面的区别!
- const的用法,特别是用在函数前面与后面的区别!
- const的用法,特别是用在函数前面与后面的区别!
- const的用法,特别是用在函数前面与后面的区别!
- const的用法,特别是用在函数前面与后面的区别!!!!!!!!!!
- const的用法,特别是用在函数前面与后面的区别!
- 【转】const的用法,特别是用在函数前面与后面的区别!
- const的用法,特别是用在函数前面与后面的区别!
- const的用法,特别是用在函数前面与后面的区别!
- const的用法,特别是用在函数前面与后面的区别!
- const的用法,特别是用在函数前面与后面的区别!
- const的用法,特别是用在函数前面与后面的区别
- const的用法(用在函数前面与后面的区别)
- const的用法,特别是用在函数后面
- const的用法,特别是用在函数后面
- C++中const在函数名前面和函数后面的区别
- C++中const在函数名前面和函数后面的区别
- C++中const在函数名前面和函数后面的区别
- const的用法,特别是用在函数后面