Rozważmy ten test Jednostka:Dlaczego std :: swap nie działa z zawartością std :: bitset <n>?
std::bitset<8> temp("11010100");
reverseBitSet(temp);
CPPUNIT_ASSERT(temp == std::bitset<8>("00101011"));
Ta implementacja działa:
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;
}
}
Chociaż ten jeden nie:
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]);
}
}
Wynik jest "11011011" zamiast "00101011"
Dlaczego swap robi to źle?
'operator' [zwraca 'serwer proxy] –