const用法

来源:互联网 发布:新的网络安全法 编辑:程序博客网 时间:2024/06/06 08:42

第一:对于变量定义的使用
常变量:即变量值不能被修改,即使指针指向该常量也不能通过指针修改其值。
常指针:即指针本身不能被修改,但指针所指向的数据可以被修改。
定义方法:const在号左边的表示常变量,在*号右边的表示常指针。例如:

char *p;//非常变量,非常指针const char *p;//常变量,非常指针char * const p;//非常变量,常指针//const char * const p;//常变量,常指针

第二:函数返回值为const作用
可以降低用户错误的调用而造成的意外,又不至于放弃安全性和高效性,即这类函数的返回值不能当成左值使用,只能当成右值使用。例如:

class Rational{...};const Rational opreator *(const Rational &lhs,const Rational &rhs){    return lhs * rhs;}Rational a,b,c;(a*b)=c;//这就会导致编译错误,可能就是程序员误操作形成的,保证安全性if((a*b)=c)//本来该写成==,可以用于检测

第三:参数列表为const
作用是防止函数内部对其const变量进行修改。
第四:函数后面加const修饰
作用:这种函数称为const成员函数,用于类中的成员函数。表明这个函数不能对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变。 不能修改类中的数据成员,只能读取类中的成员数据,不能在函数中调用其他不是const的函数,但是可以改变在函数内部定义的变量值。如果在函数内部调用了非const的函数,非const的函数是允许修改类的成员数据的,这就矛盾了,编译会错误。
第五:在const函数中修改类的成员数据条件
如果非要在const中修改类的成员数据,方法是在类的成员数据的声明前添加mutable关键字

class A{mutable std::size_t length;//这个成员变量可以总是被更改,即使在const成员函数内};

第六:对象与成员函数之间的调用关系
对一般情况下,通常修改对象的构造函数和析构函数而言,它们不允许被声明成const。使用方法如下:
(1)非常量对象调用非常量成员函数 (正确)
(2)非常量对象调用常量成员函数 (正确)
(3)常量对象调用常量成员函数 (正确)
(4)常量对象调用非常量成员函数 (错误)
尽管构造函数必须是非常量成员函数,但它仍然可用于初始化常量对象。

0 0
原创粉丝点击