임시 항목의 수명
C에서는 함수에서 값을 반환하거나 표현식을 평가하는 등 다양한 이유로 임시 항목이 생성됩니다. 올바른 프로그램 동작을 위해서는 임시 항목의 수명을 이해하는 것이 중요합니다.
다음 코드 조각을 고려하세요.
std::string foo() { std::string out = something...; return out; } void bar(const char* ccp) { // do something with the string.. } bar(foo().c_str());
이 코드에서 foo()로 생성된 임시 문자열은 bar() 호출의 const char* 포인터입니다. 질문이 생깁니다: 이 코드가 왜 유효한가요?
답은 임시 코드의 수명에 있습니다. C 표준에 따르면 임시 객체는 객체를 생성한 rvalue를 어휘적으로 포함하는 전체 표현식이 완전히 평가되면 소멸됩니다.
위 코드에서 전체 표현식은 bar(foo().c_str ()). 이 표현식의 평가는 '(열린 괄호)에서 시작하여 마지막 ')'(닫는 괄호)에서 끝납니다. 이 표현식 내에서 foo()를 평가하여 임시 문자열이 생성되고 임시 문자열에 대해 c_str() 메서드가 호출됩니다.
따라서 임시 문자열은 전체 표현식의 시작 부분에 존재하며 bar() 호출 이후 표현식이 완전히 평가되면 파괴됩니다. 이는 bar()의 const char* 포인터가 여전히 유효한 문자열을 참조하는 이유를 설명합니다.
요약하면 foo()에서 반환된 임시는 이를 포함하는 전체 표현식이 평가된 후에만 삭제되므로 다음을 보장합니다. foo().c_str()에서 반환된 포인터는 bar() 호출 전체에서 유효한 상태로 유지됩니다.
위 내용은 C 임시는 얼마나 오래 지속되며 이 코드는 왜 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!