从 stdin 输入 std::string 之前是否必须初始化它?

ale*_*per 3 c++ initialization input

我需要string在 C++ 中声明一个新变量,然后从标准输入读取它。

我是否必须先初始化字符串,或者这是一个不必要的步骤?换句话说,哪个代码更好:选项 1 或选项 2(或者它们是否相同)?

1)

string s = ""; 
cin >> s;
Run Code Online (Sandbox Code Playgroud)
string s; 
cin >> s;
Run Code Online (Sandbox Code Playgroud)

Arn*_*rah 5

好吧std::string,这并不重要。由于 的默认构造函数std::string用空字符串初始化它:

默认构造函数。构造空字符串(零大小和未指定的容量)。(来源

两条线在行为方面本质上做同样的事情。选择 1 还是 2 并不重要,但我想说的是,如果默认构造函数执行相同的操作,那么该赋值就过时了。

如果您有某种整型类型,没有默认构造函数,那么大多数人仍然将其保留为未初始化,因为输入是在之后立即进行的。然而,我发现最好用默认值初始化这些变量,因为这可以处理输入因某种原因失败的情况(无效类型、错误的流状态等)