C++ 全局布尔变量在全局销毁期间可靠吗?

C++ 全局布尔变量在全局销毁期间可靠吗?,c++,global-variables,destructor,object-lifetime,C++,Global Variables,Destructor,Object Lifetime,如果我有一个简单的数据类型作为一个全局变量,比如布尔标志;具体地说,没有析构函数的东西——即使在全局销毁过程中,该变量仍然可靠吗?或者这不能保证 例如,以下代码的结果是否定义良好 国旗h: Flag.cpp: 主要内容: 是的,这是安全的。存储的生存期是程序的持续时间。生命周期中的主要问题是通过g_Flagchecker初始化的时刻。由于内置类型不存在取消初始化的情况,因此只要进程中有代码执行,g_标志就会保持有效。是的,这是安全的。存储的生存期是程序的持续时间。生命周期中的主要问题是通过g_F

如果我有一个简单的数据类型作为一个全局变量,比如布尔标志;具体地说,没有析构函数的东西——即使在全局销毁过程中,该变量仍然可靠吗?或者这不能保证

例如,以下代码的结果是否定义良好

国旗h:

Flag.cpp:

主要内容:


是的,这是安全的。存储的生存期是程序的持续时间。生命周期中的主要问题是通过g_Flagchecker初始化的时刻。由于内置类型不存在取消初始化的情况,因此只要进程中有代码执行,g_标志就会保持有效。

是的,这是安全的。存储的生存期是程序的持续时间。生命周期中的主要问题是通过g_Flagchecker初始化的时刻。由于内置类型没有反初始化这类东西,只要进程中有代码执行,您的g_标志就仍然有效。

您确定吗,如果g_标志是一个常规类,我们肯定会遇到问题。同样地,也没有指定哪个全局变量将首先被初始化。@Jarod42:这就是为什么我要指出,对于内置类型来说,没有反初始化这样的事情。类确实有析构函数,并且这些析构函数是在干净退出之前运行的。我认为唯一的问题是,在程序完全退出之前,是否保证取消初始化的存储不能用于任何其他用途@MSalters说生命周期包括退出,所以听起来不错:你确定吗,如果g_Flag是一个普通类,我们肯定会有问题。同样地,也没有指定哪个全局变量将首先被初始化。@Jarod42:这就是为什么我要指出,对于内置类型来说,没有反初始化这样的事情。类确实有析构函数,并且这些析构函数是在干净退出之前运行的。我认为唯一的问题是,在程序完全退出之前,是否保证取消初始化的存储不能用于任何其他用途@MSalters说生命周期包括退出,所以听起来不错:
void SetFlagState(bool flag);
bool GetFlagState();
#include <Flag.h>
namespace { // local declarations
bool g_flag; 
}

void SetFlagState(bool flag)
{
    g_flag = flag;
}
bool GetFlagState()
{
    return g_flag;
}
#include <iostream>
#include <Flag.h>

class FlagChecker
{
public:
    ~FlagChecker()
    {
        std::cout << "Flag value: " << GetFlagState() << std::endl;
    }
};
FlagChecker g_FlagChecker; // global instance; dtor will be called on exit

int main()
{
    SetFlagState(true);
}