Emette F~
ma mi aspettavo ~F
NON il più importante const .. ma cos'è questo?
#include <iostream>
struct Foo {
int _x;
operator const int &() const {return _x;}
~ Foo() {std :: cout << "~";}
};
void foo (const int &)
{
std :: cout << "F";
}
int main()
{
foo (Foo());
}
ho costruito questo come un controesempio per dimostrare che il più importante-const è un'eccezione piuttosto che una regola. Normalmente è scritto come
quando un riferimento const si lega ad una temporanea, poi la durata di tale temporanea è esteso a tutta la durata del rinvio
stavo cercando di illustrare che, anche se Foo()
è temporaneo, il riferimento a _x
restituito dall'operatore di conversione non lo è e il codice precedente non è sicuro.
Ma l'uscita sembra dimostrare che l'esempio è sicuro, la durata della temporanea Foo()
si estende per l'esistenza di un riferimento const ad uno dei suoi membri.
È giusto? Dove è specificato lo standard?
Tornando riferimenti è più spesso una cattiva idea di una buona. Questo è un buon esempio di questo. –
@ R.MartinhoFernandes Quindi dichiari 'operator []' come ...? – curiousguy