は、このユニットテストを考えてみましょう:std :: bitset <n>コンテンツでstd :: swapが動作しないのはなぜですか?
std::bitset<8> temp("11010100");
reverseBitSet(temp);
CPPUNIT_ASSERT(temp == std::bitset<8>("00101011"));
この実装では動作します:
template<size_t _Count> static inline void reverseBitSet(std::bitset<_Count>& bitset)
{
bool val;
for (size_t pos = 0; pos < _Count/2; ++pos)
{
val = bitset[pos];
bitset[pos] = bitset[_Count-pos-1];
bitset[_Count-pos-1] = val;
}
}
この1つはしませんが:
template<size_t _Count> static inline void reverseBitSet(std::bitset<_Count>& bitset)
{
for (size_t pos = 0; pos < _Count/2; ++pos)
{
std::swap(bitset[pos], bitset[_Count-pos-1]);
}
}
結果が "11011011" の代わりに "00101011"
ですスワップが間違っているのはなぜですか?
ビットセットの 'operator []'はプロキシオブジェクトを返します –