在 C++ 中通过引用和值传递字符串
Posted
技术标签:
【中文标题】在 C++ 中通过引用和值传递字符串【英文标题】:Passing strings by reference and value in C++ 【发布时间】:2015-04-08 01:53:28 【问题描述】:我想声明一个字符串,通过引用传递它来初始化它,然后通过值传递给'outputfile'函数。
下面的代码有效,但我不知道为什么。在 main 中,我希望传递字符串 'filename' 之类的
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;
【问题讨论】:
&filename
创建一个指针。指针和引用不兼容。
为什么不想使用返回值?
代码“有效”,因为它完全按照您的描述进行。在你的开场白中,做得很好。关于&filename
的错误,它不应该编译,因为引用不是指针。见this question and answers。关于它们的异同。
【参考方案1】:
您的代码按预期工作。
&filename
返回filename
的内存地址(也称为指针),但startup(std::string& name)
需要引用,而不是指针。
C++ 中的引用只是使用普通的“按值传递”语法传递:
startup(filename)
引用 filename
。
如果您修改了startup
函数以获取指向std::string
的指针:
void startup(std::string* name)
然后您将使用地址操作符传递它:
startup(&filename)
附带说明,您还应该让outputfile
函数通过引用获取其参数,因为不需要复制字符串。而且由于您没有修改参数,因此您应该将其作为const
参考:
void outputfile(const std::string& name)
有关如何传递函数参数的更多信息,here are the rules of thumb for C++。
【讨论】:
以上是关于在 C++ 中通过引用和值传递字符串的主要内容,如果未能解决你的问题,请参考以下文章