2010-10-15 14 views
8

Attualmente sto aggiornando le mie competenze in C++ e mi chiedevo se fosse possibile assegnare qualcosa a *this. So che assegnare a this è vietato, ma non riesco a trovare le stesse informazioni per il mio caso.E 'consentito assegnare a un utente non autorizzato (* questo)?

Un esempio:

class Foo { 
    int x; 
public: 
    Foo(int x) : x(x) {} 
    Foo incr() { return Foo(x+1); } 
    void incr_() { (*this) = incr(); } 
}; 

Edit: corretto incr() 's tipo di ritorno da void a Foo.

risposta

2

void incr() { return Foo(x+1); }

Questo non è valido. Non è possibile restituire un oggetto Foo da una funzione con tipo di ritorno void.

void incr_() { 

    (*this) = incr(); // This invokes Foo& operator = (const Foo&) (compiler synthesized) 
} 

Questo va bene.

+3

Questo sarebbe stato più adatto come commento che come risposta, IMO. –

+1

@Etienne: Lemme completa prima la mia risposta. ':' –

+1

Hai perfettamente ragione, ma ho semplicemente commesso un errore lì. Intendevo che la funzione fosse 'Foo incr()'. – Kolja

4

Sì, è consentito e in effetti richiama l'operatore di assegnazione della classe.

0

Sì, è possibile, se il valore di ritorno *this è di un tipo di dati definito da un operatore di assegnazione.

1

Sì, funziona. E *this = x è solo zucchero sintattico per operator=(x).

Problemi correlati