c ++方法中的静态布尔变量

问题描述 投票:0回答:1

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

我在成员函数中有一个简单的代码,看起来像这样:

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)时,尽管它在监视窗口上显示为0,并以false开头,但它却将其视为一个真值。真令人困惑

c++ methods static boolean
1个回答
1
投票

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


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

尝试打印bassert(!b)等的值

© www.soinside.com 2019 - 2024. All rights reserved.