首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

C++函数调用何时用引用类型

作者:  时间: 2011-05-27

非引用形参通过用实参的副本初始化形参,修改形参的值,不会影响实参的值,然而复制实参并不是在所有的情况下都适合,不适宜复制实参的情况包括:

当需要在函数中修改实参的值时

当需要以大型对象作为实参传递时。对实际的应用而言,复制对象所付出的时间和存储空间代价往往过大

当没有办法实现实参的复制时。

对第一种情况很常见,而第二种情况,则是为了性能必须要考虑进去的,比如下面的一段程序,就把形参用成了引用类型,是因为我这个程序是要把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);
        }
    }
}