2010-10-15 10 views
8

Obecnie odświeżam moje umiejętności w C++ i zastanawiałem się, czy można coś przypisać do *this. Wiem, że przypisywanie do this jest zabronione, ale nie mogę znaleźć tych samych informacji dla mojej sprawy.Czy można przypisać do dereferencji to (* to)?

Przykład:

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

Edit: Poprawione incr() „s typ zwracany z void do Foo.

Odpowiedz

2

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

To jest nieważne. Nie można zwrócić obiektu Foo z funkcji zwracającej typ void.

void incr_() { 

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

To jest w porządku.

+3

Byłoby to bardziej odpowiednie jako komentarz niż jako odpowiedź, IMO. –

+1

@Etienne: Lemme uzupełnij moją odpowiedź w pierwszej kolejności. ':)' –

+1

Masz całkowitą rację, ale po prostu popełniłem błąd. Miałem na myśli funkcję "Foo incr()". – Kolja

4

Tak, jest dozwolone, i faktycznie wywołuje operatora przydziału klasy.

0

Tak, można, jeśli zwracana jest wartość typu danych, która ma zdefiniowany operator przypisania.

1

Tak, to działa. I *this = x to po prostu cukier syntaktyczny dla operator=(x).

Powiązane problemy