c++ - rbegin - 범위 지정 for




range-for-loops와 std:: vector<bool> (2)

이 코드가 작동하는 이유는 무엇입니까?

std::vector<int> intVector(10);
for(auto& i : intVector)
    std::cout << i;

그리고 이것은하지 않습니까?

std::vector<bool> boolVector(10);
for(auto& i : boolVector)
    std::cout << i;

후자의 경우 오류가 발생합니다.

오류 : 'std :: _ Bit_iterator :: reference {aka std :: _ Bit_reference}'형식의 rvalue에서 'std :: _ Bit_reference &'형식의 비 const 참조를 초기화하지 못했습니다.

for(auto& i : boolVector)

std::vector<bool> 은 컨테이너가 아니기 때문에 !

std::vector<T> 의 반복자 (iterators)는 일반적으로 T& 역 참조합니다.

그러나 std::vector<bool>bool 정수로 묶기 때문에 액세스 할 때 비트 마스크를 수행하는 프록시가 필요합니다. 따라서 iterator는 Proxy 반환합니다.
반환 된 Proxy 는 prvalue (임시)이므로 auto& 와 같은 lvalue 참조에 바인딩 할 수 없습니다.

해결책 : auto&& 사용하십시오. 주어진 값이 있으면 lvalue 참조로 정확하게 붕괴됩니다. 또는 프록시가 주어지면 임시 alive를 바인딩하고 유지합니다.








auto