>백엔드 개발 >C++ >`&s[0]`은 C std::string의 문자에 대한 안전하고 연속적인 포인터입니까?

`&s[0]`은 C std::string의 문자에 대한 안전하고 연속적인 포인터입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-05 15:41:10963검색

Is `&s[0]` a Safe and Contiguous Pointer to Characters in a C   std::string?

"&s[0]"이 std::string에서 연속 문자를 참조할 수 있습니까?

다음과 같은 코드가 있는 것으로 나타났습니다.

std::string s;
s.resize( strLength );
memcpy( &s[0], str, strLength );

s가 std::Vector라면 안전하겠지만 문제는 다음과 같습니다. std::string을 안전하게 사용하는 것입니다.

C 98/03에서는 std::string의 할당이 연속적이라는 보장이 없습니다. 그러나 C 11은 이러한 연속성을 강제합니다. 실제로 대부분의 구현에서는 연속 저장소를 사용합니다.

&s[0] 사용은 길이가 0인 문자열에서도 C 11 표준에 따라 작동하도록 보장됩니다. 이는 연산자[]가 다음과 같이 정의되기 때문입니다.

Returns *(begin() + pos) if pos < size(), otherwise a reference to an object of type T with value charT(); the referenced value shall not be modified

또한 data()는 다음과 같이 정의됩니다.

Returns: A pointer p such that p + i == &s[i] for each i in [0,size()].

따라서 "&s[0]"은 연속된 문자를 가리킵니다. std::string 형식으로 안전하게 사용할 수 있습니다.

위 내용은 `&s[0]`은 C std::string의 문자에 대한 안전하고 연속적인 포인터입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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