在C ++中通过引用和值传递字符串

时间:2015-02-08 05:27:35

标签: c++ string pass-by-reference pass-by-value

我想声明一个字符串,通过引用传递它来初始化它,然后通过值将它传递给'输出文件'功能

以下代码有效,但我不知道为什么。在主要我希望传递字符串'文件名'像

startup(&filename)

但是这会产生错误,而下面的代码并没有。为什么?另外,有没有更好的方法来做到这一点而不使用返回值?

#include <iostream>
#include <string>
using namespace std;
void startup(std::string&);
void outputfile(std::string);
int main()
{
    std::string filename;
    startup(filename);
    outputfile(filename);
}   
void startup(std::string& name)
{
    cin >> name;
}
void outputfile(std::string name)
{
    cout << name;
}

1 个答案:

答案 0 :(得分:4)

您的代码按预期工作。

&filename返回(也称为指针)filename的内存地址,但startup(std::string& name)想要引用,而不是指针。

C ++中的引用只是使用普通的“pass-by-value”语法传递:

startup(filename)通过引用获取filename


如果您修改startup函数以取代指向std::string的指针:

void startup(std::string* name)

然后你将使用address-of运算符传递它:

startup(&filename)


作为旁注,您还应该使outputfile函数通过引用获取其参数,因为不需要复制字符串。由于您没有修改参数,因此您应该将其作为const参考:

void outputfile(const std::string& name)

有关如何传递函数参数的更多信息,请here are the rules of thumb for C++