>백엔드 개발 >C++ >`&s[0]`은 C`std::string`에서 연속 메모리 할당을 보장합니까?

`&s[0]`은 C`std::string`에서 연속 메모리 할당을 보장합니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-14 01:55:13854검색

Does `&s[0]` Guarantee Contiguous Memory Allocation in a C   `std::string`?

std::string에서 "&s[0]"을 통해 문자에 액세스

C에서 std::string 클래스는 다음을 제공합니다. 문자 시퀀스를 조작하는 편리한 방법입니다. 그러나 문자열 데이터의 기본 표현은 구현에 따라 다를 수 있으므로 메모리 안전성에 대한 의문이 생길 수 있습니다.

질문:

"&s[0]"을 사용하여 std::string의 문자에 액세스하면 연속 메모리가 보장됩니다. 할당?

답변:

C 98/03 표준에서는 std::string의 메모리 할당이 명시적으로 정의되지 않아 구현에 맡깁니다. . 그러나 C 11 표준은 std::string 객체에 대한 연속 저장소를 요구합니다.

실제로 C 11 표준화 전후의 대부분의 구현에서는 std::string에 대한 연속 저장소를 채택했습니다. 즉, "&s[0]"을 사용하여 문자에 액세스하는 것은 일반적으로 안전한 것으로 간주됩니다.

표준 보장 액세스:

C 11 표준에 따르면 연산자[ ] std::string의 경우 항상 유효한 문자 참조에 대한 액세스가 보장됩니다. 문자열이 비어 있는 경우에도 "&s[0]"은 charT() 값이 있는 객체를 가리키도록 정의되어 유효한 메모리 참조로 유지됩니다.

이는 다음을 통해 더욱 강화됩니다. 반환된 포인터 "p"가 유효한 범위 내에서 "&operator[](i)"를 통해 액세스할 수 있는 요소와 일치하는 연속 메모리 위치를 참조해야 함을 지정하는 std::string에 대한 data() 정의 [0,size()].

기록 참고:

C 0x 표준의 이전 버전에서 "&s[0]"의 동작은 0- 길이 문자열이 정의되지 않았습니다. 그러나 사전 표준화된 C 0x 및 후속 표준 초안에서는 이 동작을 명확히 하여 "&s[0]"이 모든 경우에 유효한 메모리 참조를 가리키도록 보장했습니다.

위 내용은 `&s[0]`은 C`std::string`에서 연속 메모리 할당을 보장합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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