在有人跳躍並說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,所有非共享對象代碼都可以內聯,所以可能是':-) –