ZfreS ha scritto:Nel caso io dichiarassi la mia funzione in questo modo: void foo( A& a) const, il compilatore la vedrebbe in questo modo: $void foo(const A* const this, const A& a).
#include <iostream>
class A
{
int x;
public:
void foo(A &a)const
{
a.x = 5;
}
};
int main()
{
A a_1, a_2;
a_1.foo(a_2);
}
const
solo a this
.vict85 ha scritto:Probabilmente c'è un errore nel tuo libro, il compilatore aggiunge unconst
solo athis
.
const
fa sì che non si possa modificare un oggetto di tipo A
tramite foo
#include <iostream>
struct A
{
int x;
void foo(A &a)const
{
x = 5;
}
};
int main()
{
A a_1, a_2;
a_1.foo(a_2);
}
member function 'A::foo' is declared const here: void foo(A &a)const
feddy ha scritto:Aggiungo solo che nel codice di @SuperSquirrel, marcare la funzioneconst
fa sì che non si possa modificare un oggetto di tipoA
tramitefoo
void foo(A &a)const
void foo(A const * const this, A &a)
*this
non può essere modificato, ma a
sì.feddy ha scritto:producemember function 'A::foo' is declared const here: void foo(A &a)const
this->x
e non a.x
come nel codice che ho postato in precedenza.foo
. a
, bensì mi riferivo a this->x
, come hai scritto tu. Volevo solo evidenziare questo per mostrare la differenza tra marcare la funzione const
, e marcare const l'argomento, nulla di più feddy ha scritto:È esattamente quello che volevo far intendere quando dicevo che "non posso modificare l'oggetto" tramite la funzione membrofoo
.
A
" era un po' equivoco! Visitano il forum: Nessuno e 1 ospite