>백엔드 개발 >C++ >C 11에서 `std::string`의 쓰기 시 복사 구현이 합법적인가요?

C 11에서 `std::string`의 쓰기 시 복사 구현이 합법적인가요?

Patricia Arquette
Patricia Arquette원래의
2024-12-15 03:28:08819검색

Is a Copy-on-Write Implementation of `std::string` Legal in C  11?

C 11에서 std::string의 COW 구현: 적법성과 제한

COW(기록 중 복사)는 종종 사용되는 기술입니다. 실제로 수정될 때까지 새 객체 생성 비용을 연기하여 성능을 향상시키는 데 사용됩니다. 그러나 COW가 C 11에서 std::string을 구현하는 데 유효한 접근 방식인지 의문이 제기되었습니다.

COW 구현에 대한 제한

C 11 표준에 따르면 (21.4.1 p6), 반복자와 참조의 무효화는 특정 경우에만 허용됩니다. 상황:

  • 비상수인 basic_string을 참조하는 표준 라이브러리 함수에 인수로 전달되는 경우.
  • 비상수 멤버 함수를 호출할 때 연산자[]를 제외하고, at, front, back, start, rbegin, end 및 rend.

COW 문자열 구현의 경우 다음을 호출합니다. const가 아닌 연산자[]는 복사본을 만들고 참조를 무효화해야 합니다. 이는 앞서 언급한 단락에 의해 금지됩니다. 결과적으로 COW를 기반으로 std::string을 구현하는 것은 더 이상 C 11에서 합법적인 것으로 간주되지 않습니다.

명시적 제한 설명

표준에서는 다음을 명시적으로 명시하지 않습니다. COW 기반 std::string 구현은 금지됩니다. 그러나 무효화 시나리오를 명시적으로 제한하는 요구 사항의 조합으로 인해 제한이 암시됩니다.

결론

이전 버전에서는 COW가 std::string에 대해 실행 가능한 구현이었지만 C의 C 11 사양에는 참조 무효화가 허용되지 않아 COW 기반 구현을 금지하는 제약 조건이 도입되었습니다.

위 내용은 C 11에서 `std::string`의 쓰기 시 복사 구현이 합법적인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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