[英]Why auto deduces a reference object instead of bool for std::bitset::operator []
我有以下代码
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列出了 3 个重载
但我想不通为什么会这样。
根据 C++11 标准,如果您的 bitset 不是const
(而您的不是),则返回引用类型:
§20.6.2 位集操作:
constexpr bool operator[](size_t pos) const; // for b[i];
reference operator[](size_t pos); // for b[i];
C++ 中的最小可寻址类型是一个字节,大概是至少 8 位[intro.memory/1] 。 因此,无法返回对单个位(小于 1 个字节)的引用。 因此,当您需要对此进行引用时,会返回一个执行一些黑魔法的代理。
您的对象不是const
,因此假设您可能希望通过[]
运算符修改元素。 您可以将其转换为const
引用并访问const
限定成员重载。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.