首页 > 解决方案 > 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,并且以假启动。真的很混乱

标签: c++methodsstaticboolean

解决方案


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


除非您将b程序的可观察行为的一部分设为值,否则编译器可以自由地对其进行优化,因为它认为合适。这是您通过调试器观察到的优化。

尝试打印bor的值assert(!b)等。


推荐阅读