considerar lo siguiente:¿Los compiladores de C++ optimizan el paso por referencia de los parámetros de POD para pasar por copia?
struct Point {double x; double y;};
double complexComputation(const& Point p1, const Point& p2)
{
// p1 and p2 used frequently in computations
}
hacer compiladores optimizar el paso por referencia en el paso por copia para evitar desreferenciar frecuentes? En otras palabras se convierten en complexComputation
esto:
double complexComputation(const& Point p1, const Point& p2)
{
double x1 = p1.x; double x2 = p2.x;
double y1 = p1.y; double y2 = p2.y;
// x1, x2, y1, y2 stored in registers and used frequently in computations
}
Desde el punto es una vaina, no puede haber ningún efecto secundario al hacer una copia a espaldas de la persona que llama, ¿verdad?
Si ese es el caso, entonces siempre puedo pasar objetos POD por referencia constante, sin importar cuán pequeño sea, y no tener que preocuparme por la semántica óptima para pasar. ¿Derecha?
EDITAR: Estoy interesado en el compilador de GCC en particular. Supongo que tendré que escribir un código de prueba y mirar el ASM.
Intenté buscar esta pregunta, pero seguí encontrando aciertos sobre los abc's de pass-by-value, pass-by-reference, etc. Lo siento si ya se ha discutido. –
Normalmente, lo contrario puede ser un mejor enfoque (http://cpp-next.com/archive/2009/08/want-speed-pass-by-value/). Pase por valor y deje que el compilador lo convierta en pase por referencia cuando lo desee. – jalf
+1 Buena pregunta –