반응형
임시 개체 반환 및 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"후보 입니다.
반응형
'Program Tip' 카테고리의 다른 글
clang의 stdbool.h에 #define false false가 포함 된 이유 (0) | 2020.12.05 |
---|---|
바벨 대 바벨 코어 대 바벨 런타임 (0) | 2020.12.05 |
:: PostgreSQL에서 무엇을합니까? (0) | 2020.12.05 |
React에서 onChange와 onInput의 차이점은 무엇입니까? (0) | 2020.12.05 |
C 및 C ++의 문자열 리터럴 유형은 무엇입니까? (0) | 2020.12.05 |