>백엔드 개발 >C++ >C 임시는 얼마나 오래 지속되며 이 코드는 왜 작동합니까?

C 임시는 얼마나 오래 지속되며 이 코드는 왜 작동합니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-15 04:42:11272검색

How Long Do C   Temporaries Live and Why Does This Code Work?

임시 항목의 수명

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

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