임시 문자열의 무결성 유지: std::string::c_str() 탐색
C 영역에서는 안전과 임시 문자열과 관련된 코드의 유효성은 종종 우려를 불러일으킵니다. 그러한 질문 중 하나는 임시 문자열의 컨텍스트 내에서 std::string::c_str()의 사용법을 둘러싸고 있습니다.
질문:
다음 코드 조각을 고려해보세요.
void consumer(char const* p) { std::printf("'%s'", p); } std::string random_string_generator(); consumer(random_string_generator().c_str());
딜레마는 임시 std::string 객체가 파괴될 수 있다는 점에서 비롯됩니다. c_str() 포인터를 검색합니다. 이는 C 표준에 따라 유효성 문제를 제기합니까?
답변:
임시 항목의 수명을 이해하는 것이 중요합니다. C에서 임시 항목은 생성 직후나 사용 전이 아니라 전체 표현이 끝나면 삭제됩니다. 따라서 주어진 코드에서 임시 std::string 개체는 Consumer()에 대한 함수 호출이 끝날 때까지 유지됩니다.
std::string::c_str()을 통해 얻은 포인터는 다음까지 유효합니다. const가 아닌 작업은 문자열 객체에 대해 수행되거나 파괴됩니다. 문자열 개체는 일시적이고 전체 표현식이 끝나면 소멸되므로 코드는 실제로 형식이 올바르고 유효합니다.
역사 각주:
다음이 중요합니다. 위에 설명된 동작은 C 98로 표준화되었습니다. 그 전에는 임시 항목의 수명이 컴파일러 구현에 따라 달라졌습니다. 그러나 표준이 성숙해짐에 따라 동작이 균일하게 정의되어 컴파일러 전반에 걸쳐 일관성이 보장되었습니다.
위 내용은 C에서 임시 문자열과 함께 `std::string::c_str()`을 사용하는 것이 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!