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是父类的数据成员这一事实很重要。