C에서는 단순성과 가독성으로 인해 범위 기반 루프가 널리 보급되었습니다. 시퀀스의 요소나 컨테이너 객체를 반복적으로 반복합니다.
그러나 std::Vector
<code class="cpp">std::vector<int> intVector(10); for(auto& i : intVector) std::cout << i;</code>
std::Vector
<code class="cpp">std::vector<bool> boolVector(10); for(auto& i : boolVector) std::cout << i;</code>
오류 메시지 "'std::_Bit_iterator::reference {일명 std 유형의 rvalue에서 'std::_Bit_reference&' 유형의 비상수 참조 초기화가 잘못되었습니다. ::_Bit_reference}'"는 상수가 아닌 참조가 rvalue로 초기화되고 있음을 나타냅니다.
문제 이해
이 불일치의 이유는 std::벡터
해결책: auto&&& 사용
이 문제를 해결하려면 auto& 대신 auto&&&를 사용해야 합니다. 이 관용구는 lvalue(예: 첫 번째 예의 intVector)가 제공될 때 lvalue 참조에 대한 참조를 올바르게 축소하는 동시에 프록시가 제공되는 경우(boolVector의 경우) 임시 참조를 바인딩하고 활성 상태로 유지합니다.
<code class="cpp">for(auto&& i : boolVector) std::cout << i;</code>
이 기술을 사용하면 std::Vector
위 내용은 std::Vector와 함께 범위 기반 루프를 사용하면 컴파일러 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!