2010-10-15 11 views
8

Actualmente estoy actualizando mis habilidades en C++ y me preguntaba si es posible asignar algo al *this. Sé que asignar a this está prohibido, pero no puedo encontrar la misma información para mi caso.¿Está permitido asignar a un desreferenciado esto (* esto)?

Un ejemplo:

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

Editar: corregido incr() 's tipo de retorno de void a Foo.

Respuesta

2

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

Esto es válido. No puede devolver un objeto Foo desde una función que tenga void tipo de devolución.

void incr_() { 

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

Esto está bien.

+3

Esto hubiera sido más apropiado como comentario que como respuesta, IMO. –

+1

@Etienne: Déjame completar mi respuesta primero. ':)' –

+1

Tienes toda la razón, pero simplemente cometí un error allí. Quise decir que la función era 'Foo incr()'. – Kolja

4

Sí, está permitido, y en realidad invoca al operador de asignación de su clase.

0

Sí, puede, si *this el valor de retorno es de un tipo de datos que tiene un operador de asignación definido.

1

Sí, funciona. Y *this = x es solo azúcar sintáctico para operator=(x).

Cuestiones relacionadas