一个非常奇怪的情况发生在我身上 - 在使用调试器时,它向我显示某个布尔变量的值是true
,但是当我打印它(或者用它做任何其他操作)时,它表现为0
(即假)。
我该怎么做才能解决这个问题?我担心这是环境问题所以发布代码示例将毫无意义。 (一个隐藏的,烦人的内存管理错误不是原因,对吧?),在这个上下文中我想指出,发现我的环境没有很好的配置会令我感到惊讶(我在这个项目中工作)环境超过一年)。
到目前为止我:
关于代码共享请求:
我很抱歉,但我无法发布代码(我的老板会很高兴看到它在网络上运行)....如果你能够提出一些关于问题可能原因的想法,它会很棒,我会自己在代码中寻找线索,检查这些原因是否真的导致了问题。但是,为了清楚起见,这里有一些困扰我的代码行:
bool dir = getNode(location)->getNext()->getDirection(); //dir is displayed as "true" in the debbuger
int toPush = (dir == 1) ? 1 : 0; //"toPush" is displayed as "0" in the debbugger
cout<<dir<<endl; //both output 0.
cout<<(dir == true)<<endl;
根据您的要求,我附加了一个屏幕截图。注意“dir”的值在屏幕的右下角显示为“true”,而右边的程序输出则以0结尾(对应于“cout&lt;&lt; dir”命令)
答案 0 :(得分:3)
您不应该使用==
运算符来测试bool
值的真相。任何非零值都是真的。你有两条cout
行,控制台窗口中的最后两行说240和0.我写这篇文章来证明我的想法:
#include <iostream>
using namespace std;
static bool getDirection()
{
union forceBoolValue
{
unsigned int iValue;
bool bValue;
};
forceBoolValue retValue;
retValue.iValue = 0xFFFFFFFF;
return retValue.bValue;
}
int _tmain(int argc, _TCHAR* argv[])
{
bool dir = getDirection(); //dir is now 255*, which is non-zero and therefore "true"
int toPush = (dir == 1) ? 1 : 0; //dir may be true but it is not one, so toPush is 0
int toPush2 = dir ? 1 : 0; //dir is true, so toPush2 is 1
cout << "Dir: " << dir << endl;
cout << "toPush: " << toPush << endl;
cout << "toPush2: " << toPush2 << endl;
return 0;
}
类似的事情发生在dir == true
,它可能再次测试一个值。我不知道为什么dir
在您的代码中获得了一个不寻常的值(240),但是如果您删除了比较并只测试了值(如上面的toPush2
那么)它应该解决问题。
我知道您说toPush
行只是为了证明这个问题,但您是否正在对任何真实代码进行比较?如果是这样,请删除它们。
* dir
可能不是255,取决于您环境中bool
的大小。