estoy trabajando en const-corrección de mi código y simplemente se preguntó por qué este código se compila:Modificación miembro de referencia del método constante en C++
class X
{
int x;
int& y;
public:
X(int& _y):y(_y)
{
}
void f(int& newY) const
{
//x = 3; would not work, that's fine
y = newY; //does compile. Why?
}
};
int main(int argc, char **argv)
{
int i1=0, i2=0;
X myX(i1);
myX.f(i2);
...
}
Por lo que yo entiendo, f() está cambiando el objeto myX, aunque dice que es const. ¿Cómo puedo asegurarme de que mi compilador se queja cuando lo asigno a y? (Visual C++ 2008)
¡Muchas gracias!
Imagine que era un puntero en lugar de una referencia. Podrías ver que '* y = newY' aún puede ser const, porque el puntero en sí no se cambia, solo el puntero. Del mismo modo, la referencia no cambia (eso es imposible), a qué se refiere. – GManNickG