C++语言中的静态布尔变量

C++语言中的静态布尔变量,c++,methods,static,boolean,C++,Methods,Static,Boolean,我有一个简单的代码,它的行为与我预期的不同。我真的很喜欢一些见解和想法 我在成员函数中有一个简单的代码,如下所示: SOME~MEMBER~FUNCTION~IMPLEMENTATION { static bool a = false; m_b = a; //m_b is a Boolean member of the parent class } 在手表窗口上赋值m_b=a之前,我看到m_b的值为1,a的值为0 在赋值m_b=a之后,我希望b有一个假值。 但当我用调试器监视窗口检查它的值时

我有一个简单的代码,它的行为与我预期的不同。我真的很喜欢一些见解和想法

我在成员函数中有一个简单的代码,如下所示:

SOME~MEMBER~FUNCTION~IMPLEMENTATION
{
static bool a = false;

m_b = a; //m_b is a Boolean member of the parent class
}
在手表窗口上赋值m_b=a之前,我看到m_b的值为1,a的值为0

在赋值m_b=a之后,我希望b有一个假值。 但当我用调试器监视窗口检查它的值时,它显示的是2而不是0,这总是会产生true

有人知道我错过了什么吗?看起来很简单,但我真的不明白哪里出了问题

更多信息: 当我进行ifa时,它将a视为一个真值,尽管它在观察窗口中显示为0,并以false启动。 真让人困惑

注意:这个答案是在对问题进行重要编辑之前写的。除非OP向我们提供足够的信息,最好是MCVE,否则我不会更新它

除非您将b的值作为程序可观察行为的一部分,否则编译器可以根据需要对其进行优化。这就是您通过调试器观察到的优化


尝试打印b或assert的值!b、 等等。

如果不使用这些变量,编译器可能会生成用于优化目的的任何代码。汇编代码甚至可能无法与C++代码对齐,因此调试器没有显示出您的期望。我忘了提到B正在使用,它是一个成员变量,我只是想简化我的问题。我将在混合bool/int的问题描述中编辑它:有时你说它的值为0/1/2,有时你说true/false。请解释一下你在“观察”窗口中实际检查了什么。我编辑了这篇文章。我很抱歉误解,我想简化我的问题,但它给出了错误的答案details@itai这就是为什么您应该始终提供a。我还希望m_b是父类的数据成员这一事实很重要。