我是否需要初始化std :: string

man*_*ans 3 c++ initialization stdstring c++11

我有以下代码:

class myclass
{
    std::string str;
public:
    void setStr(std::string value)
    { 
        str=value;
    }
    std::string getStr()
    {
        return str;
    }
 }

 main()
 {
   myclass ms;
   std::cout<<ms.getStr()<<std::endl;
 }
Run Code Online (Sandbox Code Playgroud)

当我编译并运行此代码时,会出现o错误,在Windows中,我总是将str作为“”。

这一直有效吗?

我需要上述行为,因为如果用户未调用set,str将始终为空字符串。

我应该在构造函数中初始化str如下:

class myclass
{
    std::string str;
public:
    myclass():str(""){}
    void setStr(std::string value)
    { 
        str=value;
    }
    std::string getStr()
    {
        return str;
    }
 }
Run Code Online (Sandbox Code Playgroud)

我想确保所有平台上的行为都相同,并且还要确保代码尽可能小巧,整洁。

Max*_*kin 5

我是否需要初始化std :: string

否。std::string默认构造函数为您初始化一个不错的空字符串。

我想确保所有平台上的行为都相同,并且还要确保代码尽可能小巧,整洁。

然后去除杂物:

struct myclass {
    std::string str;
};
Run Code Online (Sandbox Code Playgroud)

虽然基本类型默认情况下不会初始化,但您需要显式初始化它们:

struct myclass {
    std::string str;
    int i = 1; // <--- initialize to 1.
};
Run Code Online (Sandbox Code Playgroud)