const用法总结

来源:互联网 发布:本港台直播软件 编辑:程序博客网 时间:2024/06/11 07:09


const修饰的东西被强制保护,防止意外的修改,能提高程序的健壮性。

1:用const修饰函数的参数

         注意:如果参数做输出用,不论是什么类型,也不论采用“指针传递”还是“引用传递”都不能加const修饰,否则该参数将失去输出功能。

        (1)如果输入参数是“指针传递”,那么加const可防止指针被修改,如果函数体内试图修改指针指向的内容,编译器将指出错误。

        (2)如果输入参数是“值传递”,函数会自动复制该参数产生一个临时对象,就算参数值被修改了,传入的参数值也不变,所以对于通过“值传递”的参数加const并没有什么意义,不要加const。

        (3)如果输入参数是“引用传递”,“引用传递”传入的是对象本身,“指针传递”传入对象的地址,也可以认为传入的是对象本身,“引用传递”能做到的事情“指针传递”也都能做到,但是指针很危险!尤其对于多人开发的大型项目,如果谁不小心改变了指针的指向,或者是“野指针”,那么找bug的过程往往会很痛苦。“值传递”会复制临时变量,对于非内置类型,产生临时对象要调用构造函数,然后将参数复制到临时对象,最后函数执行完毕,调用析构函数析构临时对象,这都将会花费时间,影响程序的效率。对于内置类型,不存在构造、析构的过程,复制也非常的快,“值传递”和“引用传递”效率几乎一样。所以,对于非内置类型,“引用传递”可以提高效率,加const可以防止对象的值被修改,对于内置类型,没必要用“引用传递”,可以加const防止其值被修改。

2:用const修饰函数的返回值

        (1)给“指针传递”方式的函数返回值加const,返回的指针不能被修改,而且该返回值只能赋给加const修饰的同类型指针。

        (2)给“值传递”方式的函数返回值加const,由于返回值复制到外部临时的存储单元中,加const没有任何意义!

        (3)给“引用传递”方式的函数返回值加const,返回值的内容不允许修改,这种情况很少见,一般出现在类的赋值函数中,目的是为了实现链式表达。另外需要强调一下的是,千万要记住不要返回栈空间引用!函数执行完后,函数体内为局部变量分配的栈空间将被回收,局部变量也就不存在了。对于指针,如果是在函数体new出来的,返回没有问题,但是如果返回在函数体内定义的数组的指针,就会出错。

3:const成员函数

          const关键字放在函数声明的尾部,const成员函数的作用是防止在函数体内修改类的成员变量,同时不允许在函数体内调用其他非const的成员函数。

0 0