¿Cómo evitar los alias y mejorar el rendimiento?
En estoRespuesta de desbordamiento de pila Está demostrado que el alias en C ++ puede ralentizar su código. Y el alias en C ++ no solo se aplica a los punteros, sino también a las referencias, y más generalmente aestos tipos especificados por la norma. Particularmente, hay
un tipo agregado o de unión que incluye uno de los tipos antes mencionados entre sus miembros (incluido, recursivamente, un miembro de una unión agregada o contenida)
Entonces, según tengo entendido, si tengo un código como el siguiente,
class A{
public:
int val;
};
void foo(vector<A> & array, int & size, A & a0) {
for(int i=0;i<size;++i) {
array[i].val = 2*a0.val;
}
}
y es posible quea0
puede alias uno de los elementos enarray
, posiblemente también aliassize
debido a la cita antes mencionada, entoncesa0
ysize
debe cargarse para cada iteración, lo que resulta en una disminución del rendimiento.
const &
no ayudará, ya que no evitará los alias según lo especificado por el estándar. Pasara0
¿por valor? Pero esto hará una copia dea0
que no me gusta, ya que en la práctica, claseA
puede ser muy complejo y copiar es una opción muy costosa.¿Existe una solución general para evitar el alias en C ++? ¿Y si si, que?