임시 문자열에 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 개체에서 std::string::c_str()을 호출하면 문자열 개체가 곧 소멸되는 것처럼 보이기 때문에 우려가 발생합니다.
그러나 C 11 표준에 따르면 std::string::c_str()을 통해 검색된 포인터는 문자열 개체에 의해 관리되는 메모리를 참조하며 그 유효성은 다음까지 확장됩니다.
제공된 코드 조각에서 임시 문자열 개체는 다음이 끝날 때 삭제됩니다. 전체 표현식(즉, Consumer() 호출 후). 따라서 std::string::c_str()을 통해 검색된 포인터는 Consumer() 호출 전체에서 유효한 상태로 유지되므로 코드는 안전한 것으로 간주됩니다.
임시 객체의 수명은 C 98부터 명확하게 정의되었습니다. , 컴파일러에 따라 달라지는 이전 버전의 C와는 다릅니다. 결과적으로 이전 버전에서는 안전하지 않았던 코드가 이제 최신 C 컴파일러에서는 안전한 것으로 간주됩니다.
위 내용은 C의 임시 문자열에 std::string::c_str()을 사용하는 것이 안전합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!