在 C++
中,存储变量的方式有几种:
存储期(
Storage Duration
):
存储期是指变量在程序中存在的时间段。在C++
中,有三种主要的存储期:- 自动存储期(
Automatic Storage Duration
):变量在函数或代码块执行时创建,函数执行结束时销毁。 - 动态存储期(
Dynamic Storage Duration
): 使用new
或malloc
分配的内存,直到使用delete
或free
手动释放为止。 - 静态存储期(
Static Storage Duration
): 变量在程序启动时创建,在整个程序运行期间都存在,直到程序结束才销毁。
- 自动存储期(
静态存储变量:
静态存储变量是在程序启动时创建,一直存在于整个程序运行期间的变量。这类变量有两种主要形式:
- 全局变量(
Global Variables
): 在函数外部声明的变量,可以被程序中的所有函数访问。 - 静态局部变量(
Static Local Variables
): 在函数内部使用static
关键字声明的变量,与自动存储期变量不同,它在函数调用之间保持其值。
在 C++
中,我们经常使用静态存储期变量,包括全局变量和使用 static
关键字声明的局部变量。然而,这些变量并不保证在程序执行前被初始化,除非它们被声明为 const
常量。为了解决这一问题,C++20
引入了 constinit
关键字,它为我们提供了一种保证变量在程序启动时被初始化的方式,从而增强了可预测性和可靠性。
尽管 constinit
确保变量在程序启动时被初始化,但这并不意味着这些变量是不可修改的常量。相反,这个关键字允许变量在初始化后在运行时或编译时上下文中被修改。
因此,constinit
关键字为我们提供了一种在使用静态存储期变量时获得初始化保证的方法,同时允许在初始化后对其进行适当的修改。