C++ 类中的字符串

C++ 类中的字符串,c++,string,function,class,C++,String,Function,Class,我在做一个项目,我有一个问题:当我调用一个包含字符串str的类时,代码是每次都创建一个字符串还是使用我已经创建的字符串? 例如: #include <iostream> using namespace std; class exClass { public: void exVoid ( string valueStr ) { str = "Hi"; cout << str; } pr

我在做一个项目,我有一个问题:当我调用一个包含
字符串str
的类时,代码是每次都创建一个字符串还是使用我已经创建的字符串? 例如:

#include <iostream>

using namespace std;    

class exClass {
public:
    void exVoid ( string valueStr )
    {
        str = "Hi";
        cout << str;
    }

private:
    string str;
};

int main()
{
    exClass myClass;

    string stringMain;

    while (1)
    {
        cout << "Insert value of str: ";
        cin >> stringMain;
        myClass.exVoid(stringMain);
    }
}
#包括
使用名称空间std;
班级感叹{
公众:
void exVoid(字符串值str)
{
str=“Hi”;
cout stringMain;
myClass.exVoid(stringMain);
}
}

所以问题是:每次我调用ExporSS时,类都会创建字符串str,或者只创建一次(当我第一次调用它时)?

遵循程序流程:

首先,创建名为
myClass
exportss
实例。这种情况只发生一次

然后创建一个名为
stringMain
字符串。这种情况也会发生一次

在这之后,您将有一个无休止的循环
,而(1)
。在这个循环中,您可以:

  • 在输出上打印
  • 获取输入
  • 调用函数
    exVoid()
  • 因此,您使用一个成员
    str
    创建一个
    的实例,并在循环中无休止地使用相同的
    str
    (通过您的函数)

    需要考虑的是函数参数。你从来没有真正使用过它。要使其在代码中具有意义,可以执行以下操作:

       void exVoid ( string valueStr )
       {
                str = valueStr;
                cout << str;
       }
    
    void exVoid(字符串值str)
    {
    str=valueStr;
    
    cout是的,每次调用exVoid时,您都在创建输入字符串的副本。如果使用引用,则可以提高效率:

    void exVoid(const std::string &value) {
        ...
    }
    

    通过从
    main
    调用它的方式,您传递了对
    stringMain
    的引用,但是通过将其设置为const,您知道您的方法不会弄乱它。

    每次调用
    exVoid
    时,您都在有效地创建一个新的
    std::string
    对象,因为
    valueStr
    参数就是这样一个对象需要创建并复制到每个调用中。但是,只有一个
    myClass.str
    对象。