2016 - 2024

感恩一路有你

全局变量必须初始化吗 的静态成员变量为什么一定要初始化?

浏览量:2261 时间:2021-03-13 11:43:57 作者:admin

的静态成员变量为什么一定要初始化?

我们知道C类的静态成员变量需要初始化,但是为什么要初始化呢。实际上,“静态成员变量需要初始化”这句话有一些问题。应该说“静态成员变量需要定义”是准确的,而不是初始化。两者的区别在于初始化是分配一个初始值,而定义是分配内存。静态成员变量只在类中声明,而没有定义,因此在类外定义它们实际上是为静态成员变量分配内存。

如何初始化一个类中的静态成员变量?

如果我们不考虑父类,我们可以先进行静态初始化,然后进行非静态初始化。

静态初始化包括静态成员变量和静态块的初始化。实际上,静态块在编译期间是集中的。

非静态初始化包括非静态成员变量初始化、非静态块和构造方法,编译后集中在构造方法中。

如果没有相互通话,那就非常简单了。首先,静态初始化。如果在静态初始化过程中调用了后者呢?!你可以编写一个代码来测试它:

输出:

你可以先看到它确实是静态初始化,但是中间有对构造方法的调用。

虽然编译器不报告错误,但此调用实际上是有风险的。

由于静态成员变量(如果已设置)在初始化之前调用类构造函数(假设存在依赖关系),因此该过程实际上是不可控制的。

看看这个例子:你能想象这种输出吗?

因此,如果必须在静态初始化过程中调用此类的构造函数。

一定要注意初始化顺序,准确到语句。

c 中定义一个变量一定要赋初值吗?

不一定。是否分配初始值根据编程的实际需要确定。1对于全局变量和局部静态变量,如果没有初始化值,则默认值为0。因此,当这类变量的初值要求为0,或者不考虑初值时,在定义时不需要赋初值,这样可以提高效率。2对于局部变量,如果没有初始值,那么默认值是随机的,即任何值都是可能的。对于这类变量,如果其初始值不重要,或者不会影响程序的结果,例如定义后,下一步就是输入代码从其他通道获取值,那么初始值就不能赋值。

变量必须初始化吗?

不。变量在使用前应给定一个值。一个好的编译器将帮助您在给定值之前找到所使用的变量。但是,变量不必初始化。在程序显式初始化之前,在函数外部或函数内部使用static关键字定义的变量(在数据部分中定义的变量,请参见2.1)已由系统初始化为0。在没有static关键字的函数或程序块中定义的变量是自动变量。如果不显式初始化这些变量,它们将具有未定义的值。如果不初始化自动变量,则必须确保在使用它之前为它赋值。通过调用malloc()函数从堆中分配的空间也包含未定义的数据,因此在使用它之前必须对其进行初始化,但是通过调用calloc()函数分配的空间已初始化为0。

全局变量必须初始化吗 类静态成员变量初始化 成员变量可以不初始化吗

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。