[英]How to get a lvalue reference to a bit in std::bitset
我试图做到以下几点:
std::bitset<2000> a_bit_set{};
auto& a_bit = a_bit_set[5];
if (complicated_predicate(a_bit, other_params))
{
a_bit.flip();
}
但叮当抱怨:
non-const lvalue reference to type 'std::bitset<2000>::reference' cannot bind to a temporary of type 'std::bitset<2000>::reference'
我怀疑这是因为operator[]
在这里返回的是右值而不是左值。 但是根据 cppreference,有一个特殊的类std::bitset<>::reference
应该允许我引用位集中的特定位。 我的问题是:我能否获得对位集中特定位的左值引用(又名std::bitset<>::reference
)?
如何获得对 std::bitset 中某个位的左值引用
你没有。 std::bitset
不包含任何代表单个位的对象,因此您不能引用此类对象。
又名
std::bitset<>::reference
std::bitset<>::reference
不是左值引用。 它是一个对象 - 一个引用包装器。 下标运算符将该对象作为纯右值返回。 您可以简单地使用该引用包装器的副本,如下所示:
auto a_bit = a_bit_set[5];
或者您可以使用右值引用来延长纯右值的生命周期:
auto&& a_bit = a_bit_set[5];
我不会在这个例子中使用后者,因为它引入了不必要的复杂性。 但它在一些其他情况下可能有用,这些情况涉及具有引用别名的模板,该别名可能是真正的引用或引用包装器,具体取决于模板参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.