C++函数调用何时用引用类型
时间:2011-05-27 来源:Crazyant_
非引用形参通过用实参的副本初始化形参,修改形参的值,不会影响实参的值,然而复制实参并不是在所有的情况下都适合,不适宜复制实参的情况包括:
l 当需要在函数中修改实参的值时
l 当需要以大型对象作为实参传递时。对实际的应用而言,复制对象所付出的时间和存储空间代价往往过大
l 当没有办法实现实参的复制时。
对第一种情况很常见,而第二种情况,则是为了性能必须要考虑进去的,比如下面的一段程序,就把形参用成了引用类型,是因为我这个程序是要把ifstream的内容复制到vector中,然而ifstream读入的是一个很大的文件,可能有10MB那么大,当然最后生成的vector也会有10MB的大小,如果采用传统的用拷贝参数传递ifstream,然后用一个临时的vector保存内容,最后再返回vector的副本时,可见浪费了很多的时间,和空间。
当然本程序不想修改实参ifstream的值,这时候,把形参声明称const的类型即可,它是可以接受非const的实参的
//函数作用,将ifstream的内容放到vector里面,其中hasOtherValue表示是否一行中,除了原词,还有词频和词性
void ifsreamToVector(ifstream & fin,vector<string> &v,bool hasOtherValue=true){v.clear();
string str;//存放词语
if(hasOtherValue){
//说明一行中,除了原词,还有词频和词性
int itmp;//存放词频
string stmp;//存放词性
while(fin>>str>>itmp>>stmp){
v.push_back(str);
}
} else {
while(fin>>str){
v.push_back(str);
}
}
}
相关阅读 更多 +