关于字符串变量的澄清传递为值传递

时间:2018-02-23 11:57:04

标签: c++

当我们传递一个类的对象作为值时,复制构造函数被调用。它将处于连续循环中。但它如何在字符串的情况下工作。

例如:

#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),我们传递一个字符串对象,在函数定义中我们处理为值。

请清除疑惑。

2 个答案:

答案 0 :(得分:4)

复制构造函数不会按值获取原始对象,否则会导致无限递归,正如您所说的那样。实际上,所有复制构造函数都将原始对象引用为。他们的签名是

T::T(const T&);

通过这种方式,复制构造函数可以访问原始对象(而不是副本)作为const引用,因此它可以执行必要的“复制”操作。

答案 1 :(得分:0)

之间的基本区别 按值传递按引用传递为:

  • 通过引用传递处理传递给函数的原始数据(相同的内存),

  • 将值复制数据传递到函数范围内的另一个(新的和临时的)内存位置(即在该函数中创建和销毁)。

此规则适用于基本类型(例如intfloatdouble)以及自定义类型(例如class objects,{{1}等等)