版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiongya8888/article/details/89390440
如果定义变量时没有指定初始值,则变量被默认初始化,此时变量被赋予了默认值,默认值到底是什么由变量类型和位置决定。
内置类型的默认初始化
函数体外初始化为0,函数体内不被初始化,使用new初始化的值是随机的。
int g_value;
int main(void)
{
int value;//C4700 使用了未初始化的局部变量“value”
int* newValue = new int;
std::cout << *newValue << std::endl;
std::cout << g_value << std::endl;
std::cout << value << std::endl;
system("pause");
return 0;
}
类类型的默认初始化
定义一个类变量但没有指定初始值时,会使用默认构造函数来初始化,所以没有默认构造函数的类不能默认初始化,函数体外定义的类变量会在模块入口点被初始化,例如windows下的mainCRTStartup。
类的数据成员是内置类型时,如果类变量定义在函数体外,则被初始化为0,函数体内则是一个随机值。
class Person
{
public:
int height;
Person()
{
std::cout << "hello!"<< std::endl;
}
};
Person g_person;
int main(void)
{
Person localPerson;
std::cout << localPerson.height << std::endl;
std::cout << g_person.height << std::endl;
system("pause");
return 0;
}
hello!
hello!
688440576
0