0

unordered_map に一連のビットセット ポインターがあります。

static unordered_map< size_t, bitset<BITSIZE>* > systemBits;

そして私の機能

template<typename system>
     static bitset<BITSIZE> & getBitFor() {

    size_t hash = typeid(system).hash_code();

    bitset<BITSIZE> * bit = systemBits[hash];

    if(bit == NULL) {
        bit = new bitset<BITSIZE>(0);
        (*bit) << POS++; // tried *bit << POS++ as well;
        systemBits[hash] = bit;
    }

    return *bit;
}

一方、POS は最初に 1 に設定された int です。

私がやろうとしているのは、新しいビットセットごとの位置の量でビットセットをシフトすることだけです。

 (*bit) << POS++;

しかし、これはうまくいかないようです。返されたビットセットを計算すると、そのすべてのビットが 0 に設定されます。次のようにすると:

bit->flip();

または (*bit).flip();

返されるビットセットは、すべての 0 を 1 に反転します。

何を与える?シフト演算子がまったく効果がないのはなぜですか?

4

1 に答える 1

0

結果を何にも代入していないからです。int をシフトしようとしている場合、同じ問題が発生します。

また、ビットセットをゼロに初期化したため、任意の量だけシフトされたゼロは常にゼロです。

于 2012-06-26T08:43:33.037 に答える