码迷,mamicode.com
首页 > 其他好文 > 详细

const参数,const返回值与const函数

时间:2015-04-20 11:07:50      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

在C++程序中,经常用const 来限制对一个对象的操作,例如,将一个变量定义为const 的:

 const  int  n=3;

则这个变量的值不能被修改,即不能对变量赋值。

       const 这个关键字经常出现在函数的定义中,而且会出现在不同的位置,比如:

               int  strcmp (const   char  *str1,const    char  *str2);

              const    int  & min (int  &, int  &);

              void  printMessage (char  *msg) const ;

1.const 参数

       出现在函数参数中的const 表示在函数体中不能对这个参数做修改。比如上面的例子中strcmp() 函数用来比较两个字符串的大小,在函数体中不应该改变两个参数的值,所以将它定义为是const 的。const 通常用来限制函数的指针参数,引用和数组参数,而一般形式的参数因为形参和实参本来就不在同一内存空间,所以对形参的修改不会影响实参,因此也没有必要限制函数体不能对参数进行修改。

 

        下面是一些使用函数 const 参数的例子:

(1)  函数 strcpy() 将 src 字符串的内容复制到 targ 字符串中,为保证 src 字符串不被修改,将它定义为 const 参数:

               void  strcpy ( const  char  *src , char  * targ);

(2)  函数 max() 从数组 array 中找出具有最大值的数组元素并返回这个最大元素的值,为保证数组元素不会在函数中被修改, 将它定义为 const  参数:

              int  max ( const  int  array[ ],  int  size);

(3)  函数 outputObject( ) 将类 Myclass 的对象 obj 的内容输出。对象定义为 const  引用,即可以保证对象不会在函数体中有所改变,又可以节省对象传递的开销:

              void  outputObject ( const   Myclass  &obj) ;

PS:

       const 指针可以接受const 和非 const 地址,但是非const 指针只能接受非const 地址。所以const  指针的能力更强一些,所以尽量多用const 指针,这是一种习惯。

2. const 返回值

        函数返回值为 const  只有用在函数返回为引用的情况。 函数返回值引用常量表示不能将函数调用表达式作为左值使用。例如前面讲的返回引用的函数 min( )。

        int  & min ( int  &i,  int  &j); 

可以对函数调用进行赋值,因为它返回的是左值:  min ( a ,  b )=4;

但是,如果对函数的返回值限定为 const  的:const  int  & min ( int & i, int  &j );

那么,就不能对 min ( a, b ) 调用进行赋值了。

3. const 函数

         在类中,可以为类的成员函数进行如下形式的定义:

class  classname {

          int  member ;

  public:

         int  getMember ( ) const ; 

};

       这里,在函数定义头后面加上的 const 表示这个函数是一个“只读函数”,函数不能改变类对象的状态,不能改变对象的成员变量的值。如在函数体中不能这么写 :

    classname :: getmember( )

   {  member =4 ; 

     return  member;

   }

 

 另外,const成员函数也不能在函数中调用其他非const 的函数。

 

http://blog.csdn.net/changrui82/article/details/6184502

const参数,const返回值与const函数

标签:

原文地址:http://www.cnblogs.com/wjxx836/p/4440823.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!