c ++中类成员的默认值

时间:2014-11-03 11:59:18

标签: c++

我的代码如下:(试图让我的原始代码更简单)

class ExClass {

public:
  int check;
  ExClass() { }
}

//in main
int main()
{
  ExClass *classPtr = new ExClass();
  if(classPtr->check == -1)
  {
    cout<<"check is negative";
  }
}

此处变量&#39;检查&#39;没有在构造函数中初始化,所以它应该占用一些垃圾值(据我所知)。

但我的问题是,它总是打印&#34;检查是否定的&#34;。(所以&#39;检查&#39;是-1)

每次都会发生这种情况?如何变量&#39;检查&#39;总是-1?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

您的check被称为uninitialized variable

  

新手程序员的一个常见假设是,所有变量在声明时都设置为已知值,例如零。虽然对于许多语言来说都是如此,但并非所有语言都是如此,因此存在错误的可能性。诸如C之类的语言使用变量的堆栈空间,为子例程分配的变量集合称为堆栈帧。虽然计算机将为堆栈帧留出适当的空间量,但它通常只需通过调整堆栈指针的值来实现,并且不会将内存本身设置为任何新状态(通常是出于效率问题)。因此,当时该内存的任何内容都将显示为占用这些地址的变量的初始值。

这意味着该值并非随机。但更重要的是,无论以前的事物是什么价值都是&#39;的事情。

另请注意,在调试模式下,某些编译器(如visual c ++)会使用幻数(In Visual Studio C++, what are the memory allocation representations?)初始化未初始化的内存。