通过引用传递字符串并通过C ++中的函数参数更新其值

时间:2014-03-25 16:18:36

标签: c++ pass-by-reference

所以如果我有这样的功能:

void edit(string& s) {
    //do something with s
}

我用它像:

std::string str = "Hello";
edit(str);

这将更新str

的值

但是现在我有一个类,其中头文件有一个construtor,如:

class MyClass {

   private:
      //something
   protected:
      std::string& str;
   public:
      //something

   MyClass(std::string& s): str(s){}
};

以后在源文件中,我计算一个字符串,我想通过传递给构造函数的字符串参数更新,但它不起作用。

你能否告诉我如何才能完成这项工作,以便我赋予std::string值的类变量反映在传递给该类构造函数的参数字符串中。< / p>

谢谢,

更新

根据建议进行上述更改(使str成为参考),我收到此错误:

“error:str必须在cosntructor base / member initializer list中初始化”

更新 - 解决方案:

嗨,所以按照这种方法,我似乎找到了解决方案:

  class MyClass {

       private:
          //something
       protected:
          std::string* str;
       public:
          //something

       MyClass(std::string* s): str(s){}
    };

后来,我有:

string mystring;

MyClass(&mystring);而且它似乎很好。

1 个答案:

答案 0 :(得分:0)

MyClass(std::string& s): str(s){}

str(s)s的内容复制到str。由于str不是引用变量,因此它是副本,不会影响传递的参数。使类成员成为引用变量。但要小心传递参数的生命周期。