const关键字

来源:互联网 发布:js怎么遍历jsonobject 编辑:程序博客网 时间:2024/05/19 06:47

1.const 常量

在一个变量前面加上const关键字,就可以将这个变量定义为常量,那么,这个变量就不能被修改了,任何试图修改这个变量的值的操作都会报错.

如:const int bufsize=512;//因为常量值不能被修改,所以定义的同时必须初始化

     bufsize=1024;//编译报错

2.const修饰函数参数

注意,const只能修饰输入型形参,不能修饰输出型形参.

const修饰函数参数的主要目的是防止在对实参的修改.值传递只是将原来变量复制一份作为函数参数,对拷贝的修改并不会改变原来变量的值.

所以,值传递方式无需加const修饰.const修饰主要是用于引用传递.

进一步考虑,那何时需用值传递,何时用const 引用传递?

这主要取决于参数的变量类型,如果是内置类型如int,double,char 等,因为对这些内置类型的复制操作不存在构造和析构的过程,所以比较快.因此对于内置类型

用值传递即可.

而对于非内置类型,其复制操作需要有构造和析构等过程,复制操作比较慢,从效率的角度考虑,对于这些类型,要用引用传递,而且为了防止对实参的改变,还要加上

const关键字.

3.用const修饰函数返回值

3.1函数返回值采用指针传递方式

对于这种方式,如果在返回值前面加const修饰,那么这个返回值指针是不能被修改的,并用它只能赋值给const 指针变量.

如:

const char *getchar();//const修饰

char * cstr=getchar();//报错

const char *cstr=getchar();//正确

 

3.2返回值采用值传递

因为这种方式返回的只是一个拷贝,所以没必要考虑const修饰.

 

3.3返回值传递采用的是引用传递

对于返回值内型为非内置类型且采用引用传递方式返回的情况,要分清返回的到底是一个拷贝还是别名.

 

4.const成员函数

如:

class Sales_item{

public:

//对象上的操作

double avg_price() const;

bool same_isbn(const Sales_item &rhs) const

     {

           return(isbn==rhs.isbn);

      }

//构造函数

Sales_item:units_sold(0), revenue(0.0) {}

private:

std::string isbn;

unsigned units_sold;

double revenue;

};

 

//avg_price()定义

double Sales_item::avg_price() const

{//不但在声明中,在定义中也必须加上const,const加在形参之后,函数体之前

//这个函数被定义为const后,不能修改类的成员变量,同时也不能调用类的非const成员方法,只能调用const成员方法

      if(units_sold)

          return revenue/units_sold;

     else

         return 0;

}

注意:

const成员函数不能修改类的成员变量.

在声明和定义中都必须加const修饰.

const成员函数只能访问类的其他const成员函数,即使存在非const成员函数也不改变成员数据,但只要它不加const修饰就不能被const成员函数访问.

非const成员函数即可访问类的const成员函数也可访问非const成员函数

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击