임시 개체의 수명 재검토
제공된 코드 조각은 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()가 반환한 임시 포인터의 "c_str()" 포인터가 여전히 유효한 이유는 무엇입니까? 상식적으로 bar()가 호출되기 전에 임시 항목을 삭제해야 한다고 제안할 수 있습니다. 그러나 그렇지 않습니다.
C 표준에 따르면 임시 객체의 수명은 해당 객체를 생성한 rvalue를 어휘적으로 포함하는 전체 표현식의 평가가 완료될 때까지 연장됩니다. 즉, 주어진 코드에서 foo()가 반환한 임시 개체는 bar() 호출이 완료될 때까지 계속 유지됩니다.
이 개념을 시각화하려면 다음을 고려하세요.
____________________ full-expression ranges from 'b' to last ')' bar(foo().c_str()); ^^^^^ ^ | | birth funeral
임시 객체는 foo()가 호출될 때 생성됩니다("탄생"으로 표시됨). 이 경우에는 bar(foo().c_str()) 함수 호출인 전체 표현식을 평가하는 동안 활성 상태로 유지됩니다. 함수 호출이 완료되면 임시 개체가 삭제됩니다("장례식"으로 표시됨).
위 내용은 C 임시 문자열의 `c_str()`이 함수 호출 후에도 계속 유효한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!