首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于字符串变量pass作为pass by值的说明

关于字符串变量pass作为pass by值的说明
EN

Stack Overflow用户
提问于 2018-02-23 19:57:04
回答 2查看 38关注 0票数 0

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

例如:

代码语言:javascript
复制
#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),我们传递给sir一个字符串对象,在函数定义中,我们作为值来处理。

请消除疑虑。

EN

回答 2

Stack Overflow用户

发布于 2018-02-23 20:10:38

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

代码语言:javascript
复制
T::T(const T&);

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

票数 4
EN

Stack Overflow用户

发布于 2018-02-23 21:34:31

通过值传递通过引用传递之间的基本区别是:

  • pass by reference处理传递给函数的原始值数据(相同内存),
  • pass by 将数据复制到函数范围内(即在该函数内创建和销毁的)不同的(新的和临时的)内存位置。

<>F213

此规则适用于基本类型(如intfloatdouble),也适用于自定义类型(如class objectsstd::string等)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48947348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档