>  기사  >  백엔드 개발  >  이동된 `std::벡터`는 비어 있는 것이 보장됩니까?

이동된 `std::벡터`는 비어 있는 것이 보장됩니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-18 03:04:02266검색

 Is a Moved-From `std::vector` Guaranteed to Be Empty?

이동된 벡터는 비어 있는 것이 보장됩니까?

일반적으로 C 표준은 이후 개체 상태에 대한 최소한의 지침만 제공합니다. 그들은 옮겨졌습니다. N3485 17.6.5.15 [lib.types.movedfrom]/1:

에 명시된 대로 C 표준 라이브러리에 정의된 유형의 개체는 (12.8)에서 이동할 수 있습니다. 이동 작업은 명시적으로 지정되거나 암시적으로 생성될 수 있습니다. 달리 명시하지 않는 한, 이러한 이동 개체는 유효하지만 지정되지 않은 상태로 배치되어야 합니다.

이 조항은 벡터가 이러한 동작의 대상이 되는 것을 제외하지는 않지만 해석의 여지를 남겨둡니다.

벡터의 특정 동작

벡터가 일반 규칙의 영향을 받지 않도록 제외하는 명시적인 표준 요구 사항은 없습니다. 개체에서 옮겨졌습니다. 그러나 벡터 구현 요구 사항에 따라 옵션이 제한됩니다.

이동 생성자:

  • 이동 생성자는 일정한 복잡성을 가져야 합니다.
  • 유일한 옵션은 소스 벡터(v)에서 리소스를 훔쳐 새 벡터를 구성하고 v를 남겨 두는 것입니다. 비어 있습니다.

이동 할당 연산자:

  • 동작은 벡터의 할당자에 따라 다릅니다.

대소문자 하나:

사례 두 번째:

사례 세 가지:

결론:

벡터의 이동 생성자의 경우 이동된 벡터는 항상 비어 있습니다. 이동 할당 연산자의 경우 이동 원본 벡터는 일반적으로 비어 있지만 할당자가 호환되지 않고 T가 MoveAssignable 또는 MoveInsertable인 특정 특정 시나리오에서는 비어 있지 않을 수 있습니다.

위 내용은 이동된 `std::벡터`는 비어 있는 것이 보장됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.