我有一个班级:
class A
{
public:
A();
~A();
void IncrementNum();
private:
int num;
};
A::A() : num(0)
{
}
A::~A()
{
}
void A::IncrementNum()
{
num++;
}
int main()
{
A obj;
obj.IncrementNum();
}
当我在构造函数中设置断点时,它显示num等于某个随机值(例如-2483290483),我将其视为未分配。当然,当我调用IncerementNum()并在num++
之后的行上设置断点时,它会显示完全相同的东西(num等于某个随机数)。重复调用IncrementNum()不会更改任何内容,num不会更改。
所以我决定将num++
更改为num = 1
,当然这会强制设置num
。不。 num
即使在离散地将其设置为1后仍显示为一些随机数。再次,对新版本的IncrementNum()的连续调用无法更改其值。
知道可能导致这种情况的原因吗?
其他信息:
我正在使用Windows 7 Home Edition和Visual Studio 2010
答案 0 :(得分:4)
您可能正在发布模式下进行编译。编译器发现num
未在任何地方使用并对其进行优化。尝试使用num
或printf()
显示cout
并再次尝试测试。