왜 임시 객체에 대한 상수가 아닌 참조를 얻을 수 getx()
없습니까? 어떤 함수가 반환합니까? 분명히 이것은 C ++ Standard에서 금지되어 있지만 표준에 대한 언급 이 아니라 그러한 제한의 목적에 관심 이 있습니다.
struct X
{
X& ref() { return *this; }
};
X getx() { return X();}
void g(X & x) {}
int f()
{
const X& x = getx(); // OK
X& x = getx(); // error
X& x = getx().ref(); // OK
g(getx()); //error
g(getx().ref()); //OK
return 0;
}
- C ++ 표준 에서는 객체에 대한 지속적인 참조가 금지되지 않기 때문에 객체의 수명이 원인이 될 수 없음이 분명합니다 .
- 상수가 아닌 함수에 대한 호출이 허용되므로 위 샘플에서 임시 개체가 일정하지 않은 것이 분명합니다. 예를 들어
ref()
임시 개체를 수정할 수 있습니다. - 또한
ref()
컴파일러를 속이고이 임시 객체에 대한 링크를 가져 와서 문제를 해결할 수 있습니다.
게다가:
그들은 "const 참조에 임시 객체를 할당하면이 객체의 수명이 연장된다"고 말합니다. 내 추가 질문 입니다. 다음 할당은 임시 객체의 수명을 연장합니까?
X& x = getx().ref(); // OK