c++ - c++方法中的静态bool变量
问题描述
我有一个简单的代码,其行为与我的预期不同。我真的很喜欢一些见解和想法。
我在成员函数中有一个简单的代码,如下所示:
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。
有人知道我错过了什么吗?它看起来很简单,但我真的不明白出了什么问题
更多信息:当我执行 if(a) 时,它会将 a 视为真值,尽管它在监视窗口上显示为 0,并且以假启动。真的很混乱
解决方案
注意:此答案是在对问题进行重要编辑之前编写的。除非 OP 为我们提供足够的信息,最好是 MCVE,否则我不会更新它。
除非您将b
程序的可观察行为的一部分设为值,否则编译器可以自由地对其进行优化,因为它认为合适。这是您通过调试器观察到的优化。
尝试打印b
or的值assert(!b)
等。