在有人跳跃并说Profile before optimize!
之前,这只是一个好奇心问题,起源于this original question。C++编译器会通过`reference`优化掉未使用的返回值吗?
如果我通过引用返回相同的对象,如果不使用它会得到优化吗?例如,我有一个Vector<>
有各种数学函数(假设我没有使用运算符重载)。两种方式书写它的:
inline void Vector::Add(const Vector& in) // Adds incoming vector to this vector
OR
inline Vector& Vector::Add(const Vector& in) // Adds incoming vector to this vector and returns a reference to this vector
现在,如果Add()
是不使用返回值时,将编译器只是干脆扔掉回归和功能随着它有没有返回值开始?如果它不是inlined
?
+1,还有一个不错的答案,正如往常一样:) –
这假设编译器会处理一次函数,而不是在每次调用函数时处理函数。许多现代编译器都可以(或可以配置这样做)后者。他们这样做的原因之一就是准确地进行这种优化。 –
“除非编译器内嵌代码否” - 意思是'现在,使用LTO,所有非共享对象代码都可以内联,所以可能是':-) –