C\C++: const的使用注意

const作用对象:普通常量、函数、对象、数组、指针、结构体、引用。

1、普通常量

      语法规则:a、const  数据类型  常量名=常量值;b、数据类型  const  常量名=常量值;

      在定义常量时必须初始化!

      eg: const  int  i=9;以后对i只能读取,不能改写。

2、指针

      摘抄来的一些写法:

      (1)const   char   *pStr="good";//*与pStr结合,const修饰的是*pStr,指向的字符串不可变,指针可变

      (2)const   (char *) pStr="good";//*与char结合,相当于新类型(char *),const修饰pStr,指针不可变,指向字符串可变

      (3)char * const  pStr="good";//类型是(char *),const修饰pStr,指针不可变,指向的字符串可变

      (4)(char *) const pStr="good";//同上

      (5)char   const  *pStr="good";//类型是char,*与pStr结合,const修饰*pStr,指向字符串不可变,指针可变

      (6)const  char * const pStr="good";//后一个const修饰pStr,指针pStr不可变;*与pStr结合,前一个const修饰的常量是*pStr,指向的字符串也是不可变

      (7)char  const * const pStr="good";//同上,指针和指向的字符串都是不可变的

      (8)typedef char*  pStr;

                const   pStr  str="good";//pStr是个新类型(char *),并且是个整体,此时str是个指针 不可变,指向内容可变

      总结:const的位置变化性大,主要是看*号是与普通类型符(char等)结合还是与常量名(pStr)的结合;*与const是不能连接在一 起说的。

3、CONST在函数中的使用 

     (1)const修饰函数形参

              示例:bool   strcmp(const  char  *str1,const  char  *str2);

              此函数比较字符串str1与str2是不是相同,只是用来比较而不能对两个字符串做修改,使用const是对两个字符串的保护;

             注意:首先明确一点,函数参数是指针、引用、数组类型时,对形参的操作就是对实参的操作,会改变原来数据的值 ;对普通的参数类型操作是对实参复本的操作,不会改变原来数据的值;所以const一般修饰指针、引用、数组类型的形参,使原来的数据不改变,起到保护作用。另外const 指针可以接受const 和非 const 地址,但是非const 指针只能接受非const 地址。

     (2)const修饰返回值

             函数返回值为 const  只有用在函数返回为引用的情况,因为只有返回值为引用时才会作为左值操作。

              示例:const  NewType  &function();其中NewType为新的复杂类型,不是原有内部类型(int 、char);

               一个示例:返回值当左值操作

                   class  student
                                {
                                   public:
                                          char *name;
                                   public:   
                                          student &set(student s) //函数返回自身所在的对象
                                                            {
                                                                return s;
                                                            }
                                 };
                 void main()
                     {
                            student  s;
                            s.name="bad";
                            cout<<(s.set(s).name="good")<<endl; //修改对象中name的值,如果返回值加const修饰的话,此句报错
                     }

            (3)const修饰整个函数

                   见const在类和对象中的使用

4、const在类中的使用

       const修饰成员函数、修饰数据成员、修饰对象

        示例:

        class  A 

                {

                      int  x,y;//坐标

               public:

                      int  GetX()  const;//得到X坐标,const成员函数

                     void  SetX(int  i);//设置X坐标

                }

           int  A::GetX()  const//定义

                       {

                             return x;

                       }

         void A::SetX(int  i)

                      {

                            x=i;

                      }

         const  A  aa;

         规则和说明:

         (1)为成员函数设定const类型,是为了限定些成员函数不能修改类的对象(具体是对象中的数据成员);

         (2)任何不修改数据成员的函数都应该声明为const函数,这样有助于提高程序的可读性和可靠性。

         (3)const成员函数定义时也要和声明时相同,即加上const标记。

         (4)非const成员函数不能被const对象调用,构造函数和析构函数对这个规则例外。

         (5)const成员函数不能调用同类的非const成员函数。

         (6)仅当某个函数是类成员时,将其声明为const才有意义;

posted @ 2013-04-16 08:15  deeeeeed  阅读(131)  评论(0编辑  收藏  举报

pppppppppppppp