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成员函数
- const关键字
- const关键字
- const关键字
- 关键字const
- const关键字
- const关键字
- const关键字
- const 关键字
- 关键字 const
- const关键字
- const关键字
- const关键字
- const关键字
- const关键字
- const关键字
- const关键字
- 关键字 const
- const关键字
- DP动态规划——最大数字子串
- innodb优化后,29小时入库1300万条数据
- IIS7中Integrated和classic的区别
- 有关Android 访问WCF的有关问题
- request.getParameterValues()用法
- const关键字
- HDU1116(Play on Words)
- 如何控制用户访问数据库
- persistence
- poj Children of the Candy Corn(Bfs + Dfs)
- 正确理解Navgation的BackItem
- Rabin-Karp算法 (拉宾-卡普)
- 继承扩展DataGrid的editors
- Linux 时间操作