> 백엔드 개발 > C++ > `std::queue::pop`이 C에서 값을 반환하지 않는 이유는 무엇입니까?

`std::queue::pop`이 C에서 값을 반환하지 않는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-28 07:27:14
원래의
798명이 탐색했습니다.

Why Doesn't `std::queue::pop` Return a Value in C  ?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿