C++中const的作用/用法

来源:互联网 发布:ewb仿真软件简介 编辑:程序博客网 时间:2024/06/16 19:24

分析const是修饰pointer本身还是修饰pointer指向的data

const的位置存在一点随意性,但是分析它是修饰data还是修饰pointer是很简单的:
1. 只要const出现在’‘的左边,那么它就是修饰pointer指向的data为只读;只要const出现在’ ‘的右边,那么它就是修饰pointer本身是只读的;
2. 当const出现在’‘的左边的时候,不论它是出现在类型符的左边还是右边,它都是完全等价的两种写法(如const int 与int const *完全等价)。

对迭代器声明const(不是const_iter)实际const修饰的是iter指向的data为只读

STL iterator建立在指针的基础上,因此,可以将迭代器看成T*。对迭代器使用const等同于对T * 这个指针使用const,const对指针,即对pointer本身进行限定,而不是对指向的data限定。对指向的data进行限定,使用const_iter。
==const std::vector<int>::iterator iter = aIntVector.begin();等同于T* const;==

在满足功能的前提下,尽量为函数的返回值使用const限定可以避免一些编程失误

例:

class Foo{........};const Foo operator*(const Foo& rhs,const Foo& lhs){    ....    //函数返回两参数的积}Foo x,y,z;......(x * y) = z;            //对两数之积的结果 赋值。如果使用const限定返回值,则这种不符合逻辑的操作或失误将会被编译器发现并报告错误if( (x * y) =z){}       //这里失误:'=='错误地变成了'=',如果没有const返回值限定,则能够通过编译,导致发生错误;有const时,编译器会发现错误

总结:对函数的返回值使用const限定,有助于排查错误、防呆检测,避免调用者错误使用

const成员函数

const成员函数是指不会修改对象的函数,在参数列表括号后面有一个const;返回值中带有const的函数不是成员函数,这个const只修饰返回值。

const成员函数的作用是:用于操作const对象。

==注意:C++中可以从一个普通成员函数中重载出它的const版本==;即:参数相同的两个成员函数,可以通过是否为const成员函数来进行重载。

const成员函数的作用

const成员函数就是用于/针对const对象进行操作。当对一个非const对象或一个const对象操作时(调用函数),根据对象是否为const选择调用普通或const成员函数。非const对象调用普通成员函数,const对象使用的是cosnt成员函数。

cosnt成员函数的格式特点

  1. 参数列表(即函数名称后面的括号)后面带着一个const表示为cosnt成员函数;
  2. cosnt成员函数一般要返回const类型,而普通成员函数返回类型不带const;(但是带不带const不是确认它是不是const成员函数的标准,第一条才是。)
  3. 注意判断应该返回value还是应该返回reference。

mutable关键字:允许const成员函数修改这个成员

将类内的一些成员定义为mutable,将允许const成员函数修改它的值。

当一个类提供const、non-const两类成员函数时,避免代码重复,增强代码复用

  1. 方法1:将重复的代码封装为另一个private函数,让non-const和const调用。这样,重复代码只剩下两句调用语句和return语句;
  2. 方法2:让non-const版本调用const版本;这样,只需要实现const版本即可,但是要求在non-const中使用强制类型转换static_cast和const_cast;