error: invalid initialization of non-const reference of type ‘bool&’ from an rvalue of type ‘std::vector::reference {aka std::_Bit_reference}’

后端 未结 2 593
一个人的身影
一个人的身影 2020-12-19 04:22

Why do I get the error: invalid initialization of non-const reference of type ‘bool&’ from an rvalue of type ‘std::vector::reference {aka std::_Bit_reference}’?

<
相关标签:
2条回答
  • 2020-12-19 05:13

    Normally, what you've assumed is the case, for literally any vector<T> except vector<bool>. The original C++98 standard specified that as a bit-packed vector, and so references to the individual elements are impossible.

    This has since been recognized as an inconvenient mistake, but backward compatibility means that it can't be changed now.

    0 讨论(0)
  • 2020-12-19 05:16

    That's because std::vector< bool > is not what it looks like.

    There's a specialization for std::vector with type bool - it's space optimized and uses a single bit for each element.

    You can try to use uint8_t or something like this, if you need this functionality. Or just return bool, not bool&.

    The reference, returned by operator[] is not a standard reference, but a proxy class, which complicates the things here.

    There are a lot of similar questions about this here:

    • operator |= on std::vector<bool>
    • Why vector<bool>::reference doesn't return reference to bool?
    • Is the use of std::vector<bool> objects in C++ acceptable, or should I use an alternative?

    And others. Read more about std::vector< bool > specialization.

    0 讨论(0)
提交回复
热议问题