const常量使用概述

来源:互联网 发布:软件怎么做虚拟机 编辑:程序博客网 时间:2024/06/16 10:07
《1》 const 成员函数
1 在函数后面加const
double aaa(double bb) const
{return bb}

任何不会修改数据成员的函数都应该声明为const类型。如果在编写const成员函数时,不慎修改了数据成员,或者调用了其它非const成员函数,编译器将指出错误,这无疑会提高程序的健壮性。

表明此函数不能影响对象的状态,说白一点就是
不会改变对象中成员变量的数值。

总结就是如下3点:
1。const 只能声名 member function
2。const member function 不能修改对象的任意成员
但是可以修改类的静态成员。
3。const member function 不能调用非 const member function
可以调用静态成员函数
//const成员函数能够访问对象的const成员,
class Demo {
public:
                Demo(){
                                sY = 0;
                }
                ~Demo(){}
public:
                 void fun() const {
                
                 //             sY = sY + 1; //不可以
                              // 访问对象的成员函数是可以的,
                                sT = sT + 1; //可以
                                cout << sT << endl;
                                 //fun2(); //不可以
                                fun3(); //可以

                                        fun4();
                }

                 void fun2()
                {
                                cout << "china" << endl;
                }

                 void fun3() const
                {
                                cout << "Love" << endl;
                }
                 static int sT;

               static void fun4()
                {
                                cout << "I Hate" << endl;
                }
                 int sY;
                 const int sX;
};


《2》 const 成员变量


(1)当const修饰成员变量的时候,表示成员常量,不能被修改,
只能在初始化中赋值。

(2) 只能在构造函数中按如下方式给变量赋值
     Demo( int x):sX( x) {
                                
                                sY = 0;
                }
(3) 成员变量可以在任何函数中使用,但是不能修改
               



2 const 定义常量
int const p=value;
coant int p=value; 
上面两者表达的功能是一样的


3 常量指针, 指针常量
(1) 常量指针 :
      把常量当const,指针当做* 。  就变成  const *p;
      所以表示指针指向的内容不可变,就是*p不能变,
       有两种表示方式:
      const   int   *p;
      int     const *p;
  (2)指针常量
      把常量当const ,指针当*
      * const p;
     所以表示指针p的值不可以变
     int * const p;   
// const (int *)  p;
    (3)指针常量和常量指针 
               const  int* const p;
               这个就表示指针p所指的内容和p都不可以改变

4 函数中使用const
 (1)const修饰函数参数

   a.传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)

void function(const int Var);

b.参数指针所指内容为常量不可变

void function(const char* Var);

c.参数指针本身为常量不可变(也无意义,因为char* Var也是形参)

void function(char* const Var);

d.参数为引用,为了增加效率同时防止修改。修饰引用参数时:

void function(const Class& Var); //引用参数在函数内不可以改变

void function(const TYPE& Var); //引用参数在函数内为常量不可变

这样的一个const引用传递和最普通的函数按值传递的效果是一模一样的,他禁止对引用的对象的一切修改,唯一不同的是按值传递会先建立一个类对象的副本然后传递过去,而它直接传递地址,所以这种传递比按值传递更有效.另外只有引用的const传递可以传递一个临时对象,因为临时对象都是const属性且是不可见的,他短时间存在一个局部域中,所以不能使用指针,只有引用的const传递能够捕捉到这个家伙.

    (2)const 修饰函数返回值

    const修饰函数返回值其实用的并不是很多,它的含义和const修饰普通变量以及指针的含义基本相同。
    a.const int fun1() //
这个其实无意义,因为参数返回本身就是赋值。
    b. 
const int * fun2() //调用时 const int *pValue = fun2(); 
                          //
我们可以把fun2()看作成一个变量,即指针内容不可变。
    c.
int* const fun3()   //调用时 int * const pValue = fun3(); 
                          //
我们可以把fun3()看作成一个变量,即指针本身不可变。

//下面是对上面的一个比较完美的解释 
如果给以“指针传递”方式的函数返回值加const 修饰,那么函数返回值(即指针)的内容不能被修改,该返回值只能被赋给加const 修饰的同类型指针。例如函数
const char * GetString(void);
如下语句将出现编译错误:
char *str = GetString();
正确的用法是
const char *str = GetString();
一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。通常,不建议用const修饰函数的返回值类型为某个对象或对某个对象引用的情况。原因如下:如果返回值为某个对象为constconst A test = A 实例)或某个对象的引用为constconst A& test = A实例) ,则返回值具有const属性,则返回实例只能访问类A中的公有(保护)数据成员和const成员函数,并且不允许对其进行赋值操作,这在一般情况下很少用到。  
0 0