繁体   English   中英

如何获得对 std::bitset 中某个位的左值引用

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

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