当我们传递一个类的对象作为值时,复制构造函数被调用。它将处于连续循环中。但它如何在字符串的情况下工作。
例如:
#include <iostream>
#include <string>
using namespace std;
string read_string(std::string s)
{
std::string test;
cout<<s;
test=s;
return test;
}
int main()
{
string sir = "start";
cout << "SIR starts out as : '" << sir << "'" << endl;
sir = read_string(sir);
cout << "and becomes '" << sir << "', after return from function." << endl << endl;
return 0;
}
这里read_string(sir)
,我们传递一个字符串对象,在函数定义中我们处理为值。
请清除疑惑。
答案 0 :(得分:4)
复制构造函数不会按值获取原始对象,否则会导致无限递归,正如您所说的那样。实际上,所有复制构造函数都将原始对象引用为。他们的签名是
T::T(const T&);
通过这种方式,复制构造函数可以访问原始对象(而不是副本)作为const引用,因此它可以执行必要的“复制”操作。
答案 1 :(得分:0)
之间的基本区别 按值传递,按引用传递为:
通过引用传递处理传递给函数的原始数据(相同的内存),
将值复制数据传递到函数范围内的另一个(新的和临时的)内存位置(即在该函数中创建和销毁)。
此规则适用于基本类型(例如int
,float
,double
)以及自定义类型(例如class objects
,{{1}等等)