C++ 中变量的初始化

Initialization of Variables in C++

据我所知,您应该始终将整数设置为特定值,因为它们将被编译器分配为垃圾值。现在我正在使用一个程序并初始化一个字符串数组,想知道它是否与 std::strings 相同。他们也被赋予了一些垃圾价值吗?其他原始类型呢?这是否仅适用于 int、long、char 等原始类型。此外,如果您有一个带有 std::string、int 等成员变量的对象;他们也被分配了垃圾值吗? (我正在研究 C++)。

另外其他编程语言也一样吗?

std::string 的默认构造函数,"Constructs an empty string, with a length of zero characters."

http://www.cplusplus.com/reference/string/string/string/

如果您的对象 (class) 混合了基元和非基元,则将调用非基元的默认构造函数,并且基元的行为就像它们不是基元时的行为一样class 的成员。也就是说,您需要初始化它们(在对象的构造函数中,最好使用初始化列表)。 (http://www.cprogramming.com/tutorial/initialization-lists-c++.html)

Are [strings] assigned some garbage value too? What about other primitive types?

C++ 标准库的字符串(即 std::string不是原始类型。与基本类型不同,它有一个构造函数,当你没有指定任何值时,它会被调用。

另一方面,intlongchar 等基本类型保持未初始化状态,除非您提供显式初始化程序,或将它们放在静态内存中(其中如果它们是零初始化的)。

所有 "primitive types"(int、double、float、指针(包括指向 char 的指针))都未初始化,除非它们是静态的。 "primitive types" 的数组也是如此。这意味着它们都可能包含 "garbage values".

标准库中的 std::string 类型是一个(模板化的)class 类型,当默认构造时,在所有情况下都被初始化为空字符串。

struct 和 class 类型的规则有点复杂,但简单来说,初始化取决于相关构造函数的工作。