1. 实验
C/C++在变量不人为赋初始值情况下,默认初始化需要分情况讨论。本人在VS上做了以下实验,分全局变量/局部变量,静态全局变量/静态局部变量,int型变量/char型变量/string型变量,程序如下:
#include<string>
#include<iostream>
using namespace std;
int g_iVal; //全局int类型变量
char g_cVal; //全局char类型变量
static int s_g_iVal; //全局静态int型变量
string g_str; //全局string类型
int main()
{
int iInterVal; //局部int类型变量
char cInterVal; //局部char类型变量
static int s_inter;//局部静态int类型变量
cout<<g_iVal<<endl;
cout<<g_cVal<<endl;
cout<<g_str<<endl;
cout<<s_g_iVal<<endl;
cout<<s_inter<<endl;
cout<<cInterVal<<endl;
cout<<iInterVal<<endl;
return 0;
}
分步调试实验结果为:
后两个局部变量直接报错,告知没有初始化变量。
2. 结论
①. 全局变量编译器会赋初值,局部变量则需要自己初始化,否则编译器报错;
②. 全局变量整型赋值系统赋初值为0,其他数值类型(float、long、double)应该都是,而char和string类型系统赋初值分别为’\0’空字符,即ASCII码0,而string是空字符串”“。
③. 静态变量无论全局还是局部,编译器都会赋初始值,值为多少由变量类型决定。
所以一般情况下,建议对所有变量都人为初始化,简单省事又放心。
个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!