Program Tip

임시 개체 반환 및 const 참조에 바인딩

programtip 2020. 12. 5. 10:28
반응형

임시 개체 반환 및 const 참조에 바인딩


중복 가능성 :
const 참조가 임시의 수명을 연장합니까?

내 컴파일러는 const 참조에 임시 할당에 대해 불평하지 않습니다.

string foo() {
  return string("123");
};

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

왜? 반환 된 문자열 foo은 일시적이고 val은 수명이 끝난 객체를 가리킬 수 있다고 생각했습니다 . C ++ 표준이이를 허용하고 반환 된 객체의 수명을 연장합니까?


이것은 C ++ 기능입니다. 코드는 유효하며 정확히 표시되는 작업을 수행합니다.

일반적으로 임시 개체는 표시되는 전체식이 끝날 때까지만 지속됩니다. 그러나 C ++는 스택의 const에 대한 참조에 임시 개체를 바인딩하면 임시 개체의 수명이 참조 자체의 수명으로 길어 지므로 일반적인 dangling-reference 오류가 발생하지 않도록 의도적으로 지정합니다. 위의 예 foo()에서 닫는 중괄호까지 라이브 에서 임시로 반환되었습니다 .

추신 : 이것은 스택 기반 참조에만 적용됩니다. 개체의 구성원 인 참조에는 작동하지 않습니다.

전체 텍스트 : GotW # 88 : Herb Sutter의 "가장 중요한 const"후보 입니다.

참고 URL : https://stackoverflow.com/questions/11560339/returning-temporary-object-and-binding-to-const-reference

반응형