Non è necessario const:
@ numerical25: Solo curioso sul perché un parametro deve essere un const in funzione sovraccarico
Non è necessario, ma è una buona decisione di progettazione.
Vedere la ++ C Sezione di serie 12,8-9:
Un assegnamento per copia operatore X :: operator user-dichiarata = è un non-statica funzione membro non template di classe X con esattamente un parametro di tipo X, X &, const X &, volatile X & o const volatili X &
penso che sia una buona idea, però:
utilizzando un parametro const fa sembra una decisione di progettazione logico per me, però, perché si vuole garantire che l'altro valore non verrà modificato.
Racconta altre persone che utilizzano la classe che non sarà la modifica del valore other
quando si dice qualcosa come: myObject = other;
ed impone questo modo non è possibile cambiare accidentalmente other
.
Inoltre, se è consentito il riferimento non const dell'oggetto come parametro, si limiterà la quantità di oggetti che possono utilizzare la funzione. Se è const, può essere utilizzato per i parametri const e non const. Se il parametro non è const, può essere utilizzato solo da parametri non const.
const si applica solo al riferimento di corrente, non l'oggetto:
@ numerical25: Non è quando qualcosa diventa un const, che è immutabile per il resto della vita delle applicazioni? ? In che modo questo differisce nell'operazione di sovraccarico ???
Un riferimento const è semplicemente un riferimento che è const. Non cambia la costanza dell'oggetto reale che stai passando.
Un esempio di non-const Ridefinizione dell'operatore:
Ecco un esempio di operatore sovraccarico in cui il parametro non è const.
Non consiglio di fare questo però:
class B
{
public:
const B& operator=(B& other)
{
other.x = 3;
x = other.x;
return *this;
}
int x;
};
void main(int argc, char** argv[])
{
B a;
a.x = 33;
B b;
b.x = 44;
a = b;//both a and b will be changed
return 0;
}
O, stai dicendo che g = (a + b * c) il risultato sul lato destro è considerato una costante ?? Quando dici che un const è solo un const all'interno della funzione. Stai dicendo che una volta che la funzione è stata completata? Quei valori potranno essere cambiati di nuovo ?? – numerical25
Sai cosa. Ha senso ora. Se lancio un valore const in una variabile. che non rende la variabile un const, significa solo che ora contiene il valore del const che può essere modificato – numerical25
@numerical, tieni presente che l'idea funziona solo come quello che hai menzionato se è pass-by-reference. – YeenFei