3

我刚刚问了另一个关于位集的问题,结果证明这是 使用 VS2010 的 C++中 VS2010 位集的一个错误

但是,在更改用于位集的构造函数后,我遇到了另一个问题(如另一个问题的编辑中所述)

当使用 bitset 的默认构造函数时,它不会被初始化为 0,而是被设置为

[8](0,0,0,0,1,1,0,1)

_p.to_ulong()返回1390560944

这是代码

class Flags
{
private:
    //List of 8 bits
    std::bitset<8> _p;
public:
    Flags();
}

Flags::Flags()
    : _p()
{}

我也只是尝试使用: _p(32),但这导致设置与上面相同的位,但是返回的值to_ulong()1437615792

这是怎么回事?

编辑:这是在 VS2010 SP1 64 位中编译的,作为 32 位程序

编辑2:

在下面的评论中,我说我可以在一个简单的程序中复制它——我可以复制两次,但从那以后每次都很好——也许我只是慢了,度过了漫长的一天。

在我的另一个项目(这是我正在尝试的模拟器)中,我将其范围缩小到一些函数指针数组。如果我取出它们被赋值的位置,那么我不会得到任何躲闪的行为,这些数组可以在这里看到

http://pastebin.com/QyiJGzNd

该代码将无法编译,因为内存寻址函数将不存在并且包括那些我必须包括一堆其他类等等等。但是为什么将值分配给函数指针数组会影响位集的值?bitset 将在init()被调用之前被初始化

4

1 回答 1

0

解决了

我有这个数组(注意索引)

void (MPU::*_STY[0x94])(BIT_8 ** pSource, const BIT_8 args[]); // STY

这是我的任务列表(注意索引)

_STY[0x94] = &MPU::ZeroPageX_SourceOnly;

我想我刚刚吸取了教训

于 2011-08-04T21:13:59.057 回答