澄清字符串变量作为通过值通过

clarification regarding string variable pass as pass by value

本文关键字:字符串 变量      更新时间:2023-10-16

当我们将类的对象传递给copy构造函数时,调用了copy构造函数。它将连续循环。但是它在字符串的情况下如何工作。

例如:

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

请清除疑问。

复制构造函数不会按值按原始对象,否则会导致无限的递归。实际上,所有复制构造函数通过参考将原始对象采用。他们的签名是

T::T(const T&);

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

通过Value 通过参考通过:

  • 通过参考通过原始数据(同一内存(,该数据传递给函数,

  • 按值复制将数据传递到函数范围的其他(新的和临时的(内存位置(即在该功能中创建和破坏(。

此规则适用于基本类型(例如intfloatdouble(以及自定义类型(例如class objectsstd::string等(