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