通过引用传递对象时是否调用复制构造函数?

Is the copy constructor called when an object is passed by reference?

本文关键字:调用 是否 复制 构造函数 对象 引用      更新时间:2023-10-16

当类对象按值传递给任何函数时,将调用复制构造函数来创建本地对象,并在返回对象时调用析构函数。 但是,如果传递了对象引用,是否会调用复制构造函数?

不,它不会被调用。

引用是别名,即现有变量的另一个名称,而不是副本的另一个名称。

看看这个例子:

class Line {
public:
int getLength( void ){}
// simple constructor
Line(  ){
cout<<"constructor"<<endl;
}   
// copy constructor          
Line( const Line &obj){
cout<<"copy ctsn";
}  
};
void callR(Line& l){
cout<<"call by refn";
}
void callC(Line l){
cout<<"call by copyn";
}

int main() {
Line line;
cout<<"before call by referencen";
callR(line);
cout<<"before call by copyn";
callC(line);
}

这将产生以下输出:

constructor ->  Line line;
before call by reference
call by ref 
before call by copy
copy cts
call by copy

如您所见,当通过引用传递对象时,不会调用复制构造函数。将引用视为指针。