珠海网站制作哪家便宜,视频号排名优化帝搜软件,定州市住房和城乡建设局 网站,外贸seo网站当定义 没有初始化式 的变量#xff08;如int i;#xff09;时#xff0c;系统 有可能 会为我们进行隐式的初始化。至于系统是否帮我们隐式初始化变量#xff0c;以及为变量赋予一个怎样的初始值#xff0c;这要取决于该 变量的类型 以及我们在 何处定义的该变量 。
一、… 当定义 没有初始化式 的变量如int i;时系统 有可能 会为我们进行隐式的初始化。至于系统是否帮我们隐式初始化变量以及为变量赋予一个怎样的初始值这要取决于该 变量的类型 以及我们在 何处定义的该变量 。
一、内置类型变量的初始化 内置变量“是否”自动初始化取决于该变量定义的位置。 ①在全局范围内的内置类型变量均被编译器自动初始化为0。
#includeiostream
using namespace std;
//全局范围内的部分内部变量
int gi; //被自动初始化为0
float gf; //被自动初始化为0.0
double gd; //被自动初始化为0.0
char gc; //被自动初始化为\0
int main(int argc, char **argv)
{return EXIT_SUCCESS;
} ②在函数体内定义的局部内置类型变量值随机有的编译器可能会为你初始化为0但千万别依赖于这种可能行为因为它会给你的程序带来未定义的行为
#includeiostream
using namespace std;
int main(int argc, char **argv)
{//局部范围内的部分内部变量int i; //不被自动初始化值随机有可能是0依编译器实现而定float f; //不被自动初始化值随机有可能是0依编译器实现而定double d; //不被自动初始化值随机有可能是0依编译器实现而定char c; //不被自动初始化值随机有可能是0依编译器实现而定return EXIT_SUCCESS;
} ③内置类型数组的初始化规则同上
#includeiostream
using namespace std;
//全局范围内的内置类型数组
int gIntArr[5]; //5个元素都被初始化为0
int main(int argc, char **argv)
{//局部范围内的内置类型数组int intArr[5]; //未被初始化return EXIT_SUCCESS;
} 二、类类型变量的初始化 类类型变量是通过构造函数进行初始化的不论类类型变量在哪里全局或者局部定义该类类型变量的构造函数默认构造函数或者指定的带参构造函数总会被调用。想要知道构造函数在各种情况下如何初始化类中数据成员的我们必须首先了解构造函数的初始化发生在何时。 //构造函数中的初始化发生在构造函数的初始化列表中 //而非构造函数体中
class Foo
{public:Foo(int i):_integer(i) //初始化列表中进行的是初始化{//这里是构造函数的函数体//在这里进行的是赋值操作而不是初始化_integer i;}private:int _integer;
}; 现在我们知道构造函数的初始化是发生在初始化列表中的那么对于初始化列表中没有显示进行初始化的内置类型变量来说其初始化规则就与上述内置类型变量的规则相同了。下面我们就一起来探索这个问题
#includeiostream
using namespace std;
class Foo
{public:Foo(void):_explicitInit(1024){}private:int _explicitInit; //在构造函数初始化列表中//显式初始化的内置类型变量int _implicitInit; //没有在构造函数中显式初始//化的内置类型变量
};
Foo gF; //全局范围内的类类型变量_explicitInit被//显式初始化为1024,_implicitInit被自动初始//化为0
int main(int argc, char **argv)
{Foo f; //局部范围的类类型变量_explicitInit被//显式初始化为1024,_implicitInit不会被//自动初始化值随机return EXIT_SUCCESS;
} 原文链接https://blog.csdn.net/jzwong/article/details/45022591