>  기사  >  백엔드 개발  >  임시 개체를 상수 참조에 바인딩하면 C에서 수명이 연장되는 이유는 무엇입니까?

임시 개체를 상수 참조에 바인딩하면 C에서 수명이 연장되는 이유는 무엇입니까?

DDD
DDD원래의
2024-11-02 17:03:02627검색

Why Does Binding a Temporary Object to a Constant Reference Extend its Lifetime in C  ?

임시 객체 반환 및 상수 참조에 바인딩

C에서 임시 객체를 상수 참조에 할당하는 것은 초기에 수명에 대한 의문을 제기할 수 있는 일반적인 작업입니다.

질문:

다음 코드가 유효하고 컴파일러 오류가 발생하지 않는 이유는 무엇입니까?

<code class="cpp">string foo() {
  return string("123");
}

int main() {
  const string& val = foo();
  printf("%s\n", val.c_str());
  return 0;
}</code>

답변:

C는 임시 개체를 상수 스택 기반 참조에 바인딩하면 참조의 수명과 일치하도록 임시 개체의 수명이 연장된다는 점을 명시적으로 정의합니다. 이 시나리오에서 foo()가 반환한 임시 개체는 main() 함수가 끝날 때까지 유지됩니다.

설명:

  • 임시 개체에는 일반적으로 수명이 짧고 나타나는 표현식의 끝에서 끝납니다.
  • 그러나 C에서는 스택의 const 참조에 대한 예외를 허용합니다.
  • 임시를 스택의 const 참조에 바인딩하여 , 임시의 수명은 참조의 수명과 일치하도록 연장됩니다.
  • 이렇게 하면 파괴된 객체를 가리키는 참조로 인해 발생하는 현수 참조 오류를 방지할 수 있습니다.

참고:

  • 이 예외는 스택 기반 const 참조에만 적용됩니다.
  • 객체의 멤버인 참조에는 적용되지 않습니다.
  • 자세한 내용은 Herb Sutter의 "GotW #88: "가장 중요한 const" 후보"를 참조하세요.

위 내용은 임시 개체를 상수 참조에 바인딩하면 C에서 수명이 연장되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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