E 'impossibile fornire una "dichiarazione" per this
. Non c'è modo di "dichiarare" un valore in C++. E this
è un valore, come già sapete.
La frequenza insufficiente e la rvalueness sono le proprietà delle espressioni che producono questi valori, non le proprietà di dichiarazioni o oggetti. A tale riguardo, si può persino sostenere che è impossibile dichiarare un lvalue. Tu dichiari un oggetto. Lvalue è ciò che viene prodotto quando si utilizza il nome di quell'oggetto come espressione. In questo senso sia "per dichiarare un valore nominale" che "per dichiarare un valore" sono espressioni di ossimoro.
La tua domanda sembra anche suggerire che le proprietà di "essere un lvalue" e "essere un temporaneo" siano in qualche modo complementari, cioè tutto è presumibilmente un lvalue o un temporaneo. In realtà, la proprietà di "essere un temporaneo" non ha alcun business qui. Tutte le espressioni sono o lvalue o rvalue. E this
sembra essere un valore.
I temporanei, al contrario, possono essere percepiti come rvalori o come valori l, a seconda di come si accede al temporaneo.
P.S. Nota, BTW, che in C++ (al contrario di C) le funzioni ordinarie sono lvalue.
Obbligatorio 'try {this = follia; } catch (...) {this = sparta; } ' – corsiKa
Fuori interesse, quale compilatore ti dà questo messaggio? –
@Oli: se il codice viene modificato in 'this = (A *) 0x12341234;', i report VC++ "* l'operando di sinistra deve essere l-value *" - un tipo di simile. – ildjarn