C에서 오류가 발생합니까? " />
C에서 범위 기반 for 루프는 컨테이너의 요소를 반복하는 편리한 방법을 제공합니다. 그러나 부울 값의 컨테이너와 함께 사용하면 특정 동작이 이상해 보일 수 있습니다.
다음 코드를 고려하세요.
<code class="cpp">std::vector<int> intVector(10); for (auto& i : intVector) std::cout << i; std::vector<bool> boolVector(10); for (auto& i : boolVector) std::cout << i;</code>
첫 번째 루프는 intVector를 성공적으로 반복하고 그러나 두 번째 루프에서는 다음 오류가 발생합니다.
error: invalid initialization of non-const reference of type ‘std::_Bit_reference&’ from an rvalue of type ‘std::_Bit_iterator::reference {aka std::_Bit_reference}’ for (auto& i : boolVector)
이 오류는 std::Vector
std::Vector
<code class="cpp">for (auto&& i : boolVector) std::cout << i;</code>
auto&&를 사용하면 컴파일러는 실제 부울 값 참조가 제공되면 lvalue 참조로 올바르게 축소되거나 프록시에 대한 참조가 제공되면 임시 프록시를 바인딩하고 활성 상태로 유지합니다.
위 내용은 std::Vector