繁体   English   中英

为什么 auto 为 std::bitset::operator [] 推导出引用对象而不是 bool

[英]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_refref_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM