jpo*_*o38 8 c++ swap bitset c++11
考虑这个单元测试:
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"
为什么交换做错了?
这个:
std::swap( bitset[pos], bitset[_Count-pos-1] );
应该实际上无法编译.operator[]对于a std::bitset不返回引用,它返回一个代理对象.该代理对象不是一个左值,因此它不能绑定到T&在std::swap.我假设它在const某种程度上编译你正在使用MSVC,它具有允许将临时绑定到非引用的扩展- 此时你可能只是交换代理而不是代理实际引用的内容至.
附注:该名称_Count由标准保留,任何其他名称以后_跟大写字母开头.