Я только что задал другой вопрос о наборах битов, который, как оказалось, является ошибкой в VS2010 наборов битов в C ++ с использованием VS2010
Однако после изменения конструктора, который я использовал для набора битов, который я запустилв другую проблему (как описано в редактировании другого вопроса)
При использовании конструктора по умолчанию для набора битов он не инициализируется нулями, а вместо этого устанавливается на
[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
Этот код не будет компилироваться, потому что адресация памятифункции не будут присутствовать и включать те, которые я должен был бы включать в себя кучу других классов и т. д. и т. д. Но почему назначение значений массивам указателей на функции влияет на значения набора битов?Битовый набор будет инициализирован до того, как init()
будет вызван