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
)不是原始类型。与基本类型不同,它有一个构造函数,当你没有指定任何值时,它会被调用。
另一方面,int
、long
、char
等基本类型保持未初始化状态,除非您提供显式初始化程序,或将它们放在静态内存中(其中如果它们是零初始化的)。
所有 "primitive types"(int、double、float、指针(包括指向 char 的指针))都未初始化,除非它们是静态的。 "primitive types" 的数组也是如此。这意味着它们都可能包含 "garbage values".
标准库中的 std::string
类型是一个(模板化的)class 类型,当默认构造时,在所有情况下都被初始化为空字符串。
struct 和 class 类型的规则有点复杂,但简单来说,初始化取决于相关构造函数的工作。
据我所知,您应该始终将整数设置为特定值,因为它们将被编译器分配为垃圾值。现在我正在使用一个程序并初始化一个字符串数组,想知道它是否与 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
)不是原始类型。与基本类型不同,它有一个构造函数,当你没有指定任何值时,它会被调用。
另一方面,int
、long
、char
等基本类型保持未初始化状态,除非您提供显式初始化程序,或将它们放在静态内存中(其中如果它们是零初始化的)。
所有 "primitive types"(int、double、float、指针(包括指向 char 的指针))都未初始化,除非它们是静态的。 "primitive types" 的数组也是如此。这意味着它们都可能包含 "garbage values".
标准库中的 std::string
类型是一个(模板化的)class 类型,当默认构造时,在所有情况下都被初始化为空字符串。
struct 和 class 类型的规则有点复杂,但简单来说,初始化取决于相关构造函数的工作。