std::queue::pop에서 반환 값의 부재 이해
C에서 std::queue 클래스는 팝을 제공합니다. 값을 반환하지 않는 메서드입니다. 이 디자인 선택은 팝 작업이 큐에서 제거된 값을 반환할 것으로 예상할 수 있으므로 직관에 어긋나는 것처럼 보일 수 있습니다. 그러나 이 설계에는 특별한 이유가 있습니다.
처음에 문서에는 pop이 값을 반환하지 않고 대신 클라이언트가 front()를 사용하여 앞쪽의 값을 검색하도록 요구하는 것이 더 논리적이라고 명시되어 있습니다. 대기줄. front()도 요소를 lvalue 변수에 복사해야 하지만 차이점은 예외 안전성에 있습니다.
예외의 경우 pop처럼 값으로 값을 반환하는 것은 안전하지 않을 수 있습니다. . pop 메소드가 다음과 같이 정의된 시나리오를 고려하십시오.
template<class T> T pop() { auto x = elements[top_position]; --top_position; return x; }
T의 복사 생성자가 반환 시 예외를 throw하는 경우 대기열의 상태는 이미 변경되었지만 요소는 변경되지 않습니다. 반환되어 사실상 대기열에서 손실됩니다. 팝된 값을 사용할 의도가 아닌 경우 이 동작은 안전하지 않고 비효율적입니다.
이러한 문제를 해결하기 위해 std::queue는 작업을 void pop 및 const T& front로 분리하여 보다 안전하고 효율적인 접근 방식을 채택합니다. (). 이를 통해 예외 안전을 보장하고 사용되지 않는 값의 불필요한 복사를 방지하는 동시에 안전하고 효율적인 대기열 작업이 가능합니다.
위 내용은 `std::queue::pop`이 C에서 값을 반환하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!