在 C++ 中通过引用和值传递字符串
Passing strings by reference and value in C++
我想声明一个字符串,通过引用传递来初始化它,然后通过值传递给 'outputfile' 函数。
下面的代码有效,但我不知道为什么。在 main 中,我希望传递字符串 'filename' like
startup(&filename)
但这会出错,而下面的代码不会。为什么?另外,有没有更好的方法可以在不使用 return 值的情况下执行此操作?
#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
returns filename
的内存地址(又名指针),但 startup(std::string& name)
需要引用,而不是指针。
C++ 中的引用仅使用正常的 "pass-by-value" 语法传递:
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++。
我想声明一个字符串,通过引用传递来初始化它,然后通过值传递给 'outputfile' 函数。
下面的代码有效,但我不知道为什么。在 main 中,我希望传递字符串 'filename' like
startup(&filename)
但这会出错,而下面的代码不会。为什么?另外,有没有更好的方法可以在不使用 return 值的情况下执行此操作?
#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
returns filename
的内存地址(又名指针),但 startup(std::string& name)
需要引用,而不是指针。
C++ 中的引用仅使用正常的 "pass-by-value" 语法传递:
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++。