const修饰引用常引用所引用的对象不能更新,使用方法为:const 类型说明符 &引用名
非const引用只能绑定非const对象,const引用可以绑定任意对象,并且都当做常对象
常引用经常用作形参,防止函数内对象被意外修改 。对于在函数中不会修改其值的参数,最好都声明为常引用 。复制构造函数的参数一般均为常引用
class Example{public: Example(int x, int y):a(x),b(y){} Example(const Example &e):a(e.a),b(e.b){} //复制构造函数 void print(); void print() const;private: const int a,b; static const int c = 10;};void Example::print() {cout<<"print():"<<a<<ends<<b<<endl;}void Example::print() const {cout<<"print() const:"<<a<<ends<<b<<endl;}const修饰函数参数const修饰参数是为了防止函数体内可能会修改参数原始对象 。因此,有三种情况可讨论:
- 1、函数参数为值传递:值传递(pass-by-value)是传递一份参数的拷贝给函数,因此不论函数体代码如何运行,也只会修改拷贝而无法修改原始对象,这种情况不需要将参数声明为const 。
- 2、函数参数为指针:指针传递(pass-by-pointer)只会进行浅拷贝,拷贝一份指针给函数,而不会拷贝一份原始对象 。因此,给指针参数加上顶层const可以防止指针指向被篡改,加上底层const可以防止指向对象被篡改 。
- 3、函数参数为引用:引用传递(pass-by-reference)有一个很重要的作用,由于引用就是对象的一个别名,因此不需要拷贝对象,减小了开销 。这同时也导致可以通过修改引用直接修改原始对象(毕竟引用和原始对象其实是同一个东西),因此,大多数时候,推荐函数参数设置为pass-by-reference-to-const 。给引用加上底层const,既可以减小拷贝开销,又可以防止修改底层所引用的对象 。
const int* func() // 返回的指针所指向的内容不能修改{ // return p;}const成员函数和数据成员类的常成员函数由于C++会保护const对象不被更新,为了防止类的对象出现意外更新,禁止const对象调用类的非常成员函数 。因此,常成员函数为常对象的唯一对外接口 。
常成员函数的声明方式:
类型说明符 函数名(参数表) const- const对象只能访问const成员函数,而非const对象可以访问任意的成员函数,包括const成员函数
- const对象的成员是不能修改的,而通过指针维护的对象却是可以修改的
- const成员函数不可以修改对象的数据,不管对象是否具有const性质 。编译时以是否修改成员数据为依据进行检查
经验总结扩展阅读
- 手机怎么把QQ空间说说一次性全删掉(qq如何恢复删掉的说说)
- 怎么一次性删掉QQ空间里的全部说说(翻看以前qq空间的说说)
- 怎么把空间说说全部清空(qq空间一键清空所有说说)
- 手机QQ空间怎么一次性删除说说求解(怎么一键删除qq说说)
- qq空间说说怎么全部删除(怎样一键清空qq空间)
- 小户型卧室如何设计 小户型卧室空间布局设计
- 恋梦空间郭蓉和谁在一起了?
- 空间站是静止的还是运动的
- 如何注销空间 1980717Z空间
- qq空间说说怎么全部删除(qq空间说说一键恢复)
