我有以下代码
std::bitset<32> bs{21};
auto ref_obj = bs[0];
auto &another_ref = bs[0];
bool bool_obj = bs[0];
ref_obj
的类型不是bool
。但another_ref
与ref_obj
的类型相同。 std::bitset::operator[]
在http://en.cppreference.com/w/cpp/utility/bitset/operator_at
但我无法弄清楚为什么会这样。
答案 0 :(得分:3)
根据C ++ 11标准,如果你的bitset不是const
(而你的不是),那么返回一个引用类型:
§20.6.2bitset操作:
constexpr bool operator[](size_t pos) const; // for b[i];
reference operator[](size_t pos); // for b[i];
答案 1 :(得分:1)
C ++中的最小可寻址类型是一个字节,可能是至少8位 [intro.memory/1]。因此,无法返回对单个位(小于1个字节)的引用。所以当你需要引用它时,会返回一个执行黑魔法的代理。
您的对象不是const
,因此假设您可能希望通过[]
运算符修改元素。您可以将其强制转换为const
引用并访问const
限定成员重载。