Skąd wzorzec nie stały nie może wiązać się z obiektem tymczasowym?

Dlaczego nie można uzyskać nie-stałych odniesień do tymczasowego obiektu, który działagetx() wraca? Oczywiście jest to zabronione przez C ++ Standard, ale interesuje mnie cel takiego ograniczenia,nie odniesienie do standardu.

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;
}
Jasne jest, że czas życia obiektu nie może być przyczyną, ponieważ jest to stałe odniesienie do obiektunie jest zabronione przez C ++ Standard.Jasne jest, że tymczasowy obiekt nie jest stały w powyższym przykładzie, ponieważ dozwolone są wywołania funkcji innych niż stałe. Na przykład,ref() może zmodyfikować tymczasowy obiekt.Dodatkowo,ref() pozwala oszukać kompilator i uzyskać link do tego tymczasowego obiektu, co rozwiązuje nasz problem.

Dodatkowo:

Mówią, że „przypisanie tymczasowego obiektu do referencji stałej wydłuża czas życia tego obiektu”, a „Nic nie mówi się o referencjach niekonstentnych”. Mójdodatkowe pytanie. Czy następujące przypisanie wydłuża czas życia obiektu tymczasowego?

X& x = getx().ref(); // OK

questionAnswers(11)

yourAnswerToTheQuestion