foo() 및 bar()의 개체 수명
C에서 함수 호출 중에 생성된 개체는 임시 개체로 간주됩니다. 올바른 프로그램 동작을 보장하려면 해당 수명을 이해하는 것이 중요합니다.
다음 코드를 고려하세요.
std::string foo() { std::string out = something...; return out; } void bar( const char* ccp ) { // do something with the string.. } bar( foo().c_str() );
질문:
왜 c_str( ) foo()가 반환한 임시 개체의 포인터는 foo()가 반환된 후에도 bar() 함수에서 유효합니다. 완료되었습니까?
답변:
C 표준에 따르면 임시 개체는 해당 생성을 포함하는 전체 표현식이 완료되면 삭제됩니다. 이 경우 전체 표현식은 다음과 같습니다.
bar( foo().c_str() );
ASCII 기술에서 임시 객체의 수명은 다음과 같습니다.
____________________ full-expression ranges from 'b' to last ')' bar( foo().c_str() ); ^^^^^ ^ | | birth funeral
임시 객체는 foo()가 생성될 때 생성됩니다. 호출되고(생성) 표현식 실행이 완료된 후(장례식) 소멸되므로 bar() 실행 전체에서 c_str() 포인터가 유효한 상태로 유지됩니다.
위 내용은 생성 함수 `foo()`가 반환된 후 `bar()`에서 임시 문자열 객체의 `c_str()` 포인터가 유효한 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!