我需要在从stdin输入std :: string之前对其进行初始化吗?

3

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

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

1)

选项1和选项2是等效的,都可以使用。在C++中,如果您没有显式地初始化字符串,则会默认为一个空字符串。

string s = ""; 
cin >> s;
string s; 
cin >> s;
2个回答

5

对于std::string来说,这两行代码实际上是行为相同的。因为std::string的默认构造函数会将其初始化为空字符串:

默认构造函数。构造一个空字符串(大小为零,容量未指定)。(来源)

从行为上看,这两行代码本质上是相同的。选择使用哪个并不重要,但我认为如果默认构造函数已经做了同样的事情,那么赋值操作就是多余的。

如果你有一些没有默认构造函数的整数类型,通常大多数人仍然保持它们未初始化,因为输入紧随其后。然而,我发现最好使用默认值来初始化这样的变量,因为这可以处理输入失败的情况(无效类型、坏的流状态等)。


0

对于 std::string,默认初始化是可以的,但是通过使用(立即调用初始化)lambda表达式,您可以更进一步:

std::string s = []() {
    std::string r;
    std::cin >> r;
    return r;
}(); //IIIL

这遵循了“始终初始化您的变量”的规则,并且作为奖励,如果需要,允许您将字符串声明为const并仍然能够从源中读取:

const std::string s = []() {
    std::string r;
    std::cin >> r;
    return r;
}(); //IIIL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接