Duplicar posible:
Why isn't the const qualifier working on pointer members on const objects?¿Por qué no hace cumplir C++ const en los datos del puntero?
Considere la siguiente clase que tiene un miembro de puntero int *a
. El compilador permite el método const constMod
a pesar de que modifica los datos del puntero. ¿Por qué el compilador no establece la información de puntero en el contexto del método const? Si a
fuera solo un int, no se nos permitiría modificarlo en un método const.
class ConstTest
{
public:
ConstTest(int *p): a(p) {}
void constMod() const {
++(*a);
}
int *a;
};
Estoy usando g ++ en linux.
la única respuesta es "porque es así", pero creo que la mayoría de nosotros acepta que generalmente es inesperado (al principio), aunque uno puede encontrar razones después. –
C++ de forma predeterminada da una constness llamada bitwise - lo que significa que se asegura de que no se ha cambiado un solo objeto, por lo que solo comprueba la dirección del puntero – rank1