C ++中变量的初始化

时间:2015-04-04 12:47:36

标签: c++ initialization

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

另外与其他编程语言相同吗?

3 个答案:

答案 0 :(得分:5)

  

[strings]也分配了一些垃圾值吗?那么其他原始类型呢?

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

另一方面,

intlongchar等原始类型保持未初始化状态,除非您提供显式初始化程序,或将它们放在静态内存中(在这种情况下,是零初始化的。)

答案 1 :(得分:3)

std :: string' s默认构造函数,"构造一个空字符串,长度为零个字符。"

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

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

答案 2 :(得分:1)

所有“基本类型”(int,double,float,指针(包括指向char的指针))都是未初始化的,除非它们是静态的。 “原始类型”的数组也是如此。这意味着它们都可能包含“垃圾值”。

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

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