考慮這個單元測試:爲什麼std :: swap不能使用std :: bitset <n>的內容?
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;
}
}
雖然這一次沒有:
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」
爲什麼交換做錯了?
bitset's operator []'返回一個代理對象 –