Antes de que alguien salte y dice Profile before optimize!
, esto es simplemente una pregunta de curiosidad y proviene de this original question.¿El compilador de C++ optimizará el valor de retorno no utilizado por `referencia`?
Si regreso por referencia el mismo objeto, ¿se optimizaría si no se utiliza? Por ejemplo, tengo un Vector<>
que tiene varias funciones matemáticas (supongamos que no estoy usando la sobrecarga del operador). Dos formas de escribirlo:
inline void Vector::Add(const Vector& in) // Adds incoming vector to this vector
O
inline Vector& Vector::Add(const Vector& in) // Adds incoming vector to this vector and returns a reference to this vector
Ahora bien, si Add()
se utiliza sin utilizar el valor de retorno, será el compilador simplemente tirar la vuelta por completo y la función se vuelve como si no tiene valor de retorno para comenzar? ¿Y si NO es inlined
?
+1, otra buena respuesta como siempre :) –
Esto supone que el compilador procesará la función una vez en lugar de procesarla cada vez que se invoca. Muchos compiladores modernos hacen (o pueden configurarse para hacer) lo último. Una de las razones por las que lo hacen es permitir precisamente este tipo de optimización. –
"a menos que el compilador incluya el código no", lo que significa que "hoy en día, con LTO, todo el código de objeto no compartido puede estar en línea, así que probablemente sí" :-) –