No es necesario const:
@ numerical25: Sólo por curiosidad acerca de por qué un parámetro tiene que ser una constante en la operación sobrecarga
No es necesario, pero es una buena decisión de diseño.
Ver el C++ sección estándar 12,8-9:
Una asignación de copia operador X :: operador-declarado user = es una función miembro no molde no estático de la clase X con exactamente un parámetro de tipo X, X &, const X &, volátil X & o const volátil X &
creo que es una buena idea sin embargo:
El uso de un parámetro const hace parece una decisión de diseño lógico para mí, porque aunque usted quiere asegurarse de que el otro valor no será cambiado.
Se dice que otras personas que utilizan su clase que no va a cambiar el valor other
cuando se dice algo así como: myObject = other;
y hace cumplir esto por lo que no puede cambiar accidentalmente other
.
Además, si permites referencias no const al objeto como parámetro, entonces estás limitando la cantidad de objetos que pueden usar tu función. Si es const, se puede usar para parámetros const y non const. Si su parámetro no es const, solo puede ser utilizado por parámetros que no son const.
const sólo se aplica a la referencia actual, no el objeto:
@ numerical25: ¿No es cuando algo se convierte en una constante, es inmutable para el resto de la vida de las aplicaciones? ? ¿Cómo difiere esto en la sobrecarga de operación?
Una referencia de const es simplemente que una referencia que es const. No cambia la constidad del objeto real que está pasando.
Un ejemplo de sobrecarga de operadores no const:
Aquí es un ejemplo de la sobrecarga de operadores donde el parámetro no es const.
No recomiendo hacer esto sin embargo:
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, ¿está diciendo que g = (a + b * c) el resultado en el lado derecho se considera una constante? Cuando dices que un const es solo un const dentro de la función. ¿Estás diciendo que una vez que la función se termina de ejecutar? Esos valores podrán cambiarse de nuevo? – numerical25
¿Sabes qué? Tiene sentido ahora. Si lanzo un valor const a un varible. eso no hace que la varible sea una const, solo significa que ahora tiene el valor de la const que puede cambiarse – numerical25
@numerical, ten en cuenta que tu idea solo funciona como lo que mencionaste si es pass-by-reference. – YeenFei