C++中从标准输入读取std::string前是否需初始化?哪种写法更优?
在C++中读取std::string时是否需要预先初始化?
嘿,这个问题问得很实在!咱们直接把话说透:
首先得明确std::string的默认行为:当你直接声明std::string s;时,它的默认构造函数已经自动把这个变量初始化成空字符串了——它不是那种未初始化的垃圾值,是完全处于有效状态的空串。
那回到你的两个选项:
- 选项1(显式初始化空串):
std::string s = "";然后读入 - 选项2(直接声明):
std::string s;然后读入
这两种写法功能完全等价,但选项2明显更优,原因有两个:
- 显式初始化空串是纯粹的冗余操作——默认构造已经帮你完成了同样的工作,多写这一行没有任何实际意义,反而让代码显得啰嗦。
- 退一步说,哪怕你给string预先赋了非空的值,当你用
std::cin >> s读取输入时,cin也会自动覆盖掉原有的内容,所以预先初始化完全没必要。
给你看两个实际代码例子,效果一模一样:
选项1(冗余的显式初始化)
#include <iostream> #include <string> int main() { std::string s = ""; // 这一行是多余的 std::cin >> s; std::cout << "输入的内容是:" << s << std::endl; return 0; }
选项2(更简洁的惯用写法)
#include <iostream> #include <string> int main() { std::string s; // 默认构造已经初始化为空串 std::cin >> s; std::cout << "输入的内容是:" << s << std::endl; return 0; }
总结一下:直接用默认构造声明std::string变量,然后直接读取输入就好,预先初始化空串完全是多余的,既不影响功能,还会让代码显得不够简洁。
内容的提问来源于stack exchange,提问作者alekscooper
相关产品推荐
相关产品推荐

