C++ 通过引用传递字符串,并通过C++;
如果我有一个函数,比如:C++ 通过引用传递字符串,并通过C++;,c++,pass-by-reference,C++,Pass By Reference,如果我有一个函数,比如: void edit(string& s) { //do something with s } 我使用它就像: std::string str = "Hello"; edit(str); 这将更新str的值 但现在我有一个类,其中头文件有一个构造函数,如: class MyClass { private: //something protected: std::string& str; public:
void edit(string& s) {
//do something with s
}
我使用它就像:
std::string str = "Hello";
edit(str);
这将更新str
的值
但现在我有一个类,其中头文件有一个构造函数,如:
class MyClass {
private:
//something
protected:
std::string& str;
public:
//something
MyClass(std::string& s): str(s){}
};
稍后在源文件中,我计算了一个字符串,我想通过传递给构造函数的字符串参数来更新它,但它不起作用
您能告诉我一些如何工作的想法吗?这样,我分配给std::string
值的类变量将反映在传递给此类构造函数的参数字符串中
谢谢,
更新:
根据建议的上述更改(将str作为参考),我得到以下错误:
“错误:必须在协构造函数基/成员初始值设定项列表中初始化str”
更新-解决方案:
您好,按照这种方法,我似乎找到了解决方案:
class MyClass {
private:
//something
protected:
std::string* str;
public:
//something
MyClass(std::string* s): str(s){}
};
稍后,我有:
string mystring;
MyClass(&mystring)代码>和voilla它似乎写得很好
MyClass(std::string& s): str(s){}
str
将s
的内容复制到str
。由于,str
不是引用变量,因此它是一个副本,不会影响传递的参数。使类成员成为引用变量。但是要小心传递参数的生命周期。缺少&在您的成员变量str中。。。应该是引用而不是变量…传递给构造函数的字符串是无关的。您的对象具有该字符串的副本。如果您没有访问该副本的权限,则您没有访问权限。谢谢,但是如果我尝试声明str引用,它将不会编译,并且我会收到错误“未初始化引用变量”?visual studio 2010,但引用成员是否必须立即初始化?但好吧,我很快地再次检查了一遍,这就是初始值设定项列表的目的。您永远都不希望类中有引用成员。@n.m.当然可以,但如果我对bool使用相同的过程,那么您能建议我如何更新作为参数传递给类构造函数的变量吗?(不是引用,而是使用poitner)但是使用std::string时,它似乎失败了