考慮下面的功能如何避免重複
f(int a[])
{
///CODE
for
for
if(a[i] > 0)
//change i on some condition
for
//CODE
if(a[i] > 0)
///CODE
}
f(int a[], int th)
{
///CODE
for
for
if(a[i] < th)
//change i on some condition
for
//CODE
if(a[i] < th)
///CODE
}
所以我們F的功能與優化龐大的身軀, 幾行是一樣的:如果(A [1]> 0) 我要添加擴展這個函數使得如果添加了一個參數,這些行應該改爲if(a [i] < th) 當我重載函數時,數百行會被複制(變得很難維護),所以我不想要這個。此外,我不能將身體劃分爲功能,因爲「線條」出現在太多的內部循環中。
第一個想法:
f(int a[], int th = -1)
{
///CODE
if(th == -1)
if(a[i] > 0)...
else
if(a[i] < th)...
///CODE
}
我不能這樣做,因爲引入額外的,如果到內循環的性能開銷。 有沒有一種方法可以有效和清晰地解決它,也許使用模板或宏?
函數指針似乎是一個很好的嘗試......? – CppLearner 2012-02-23 10:40:28
@CppLearner:由於性能限制,無法做到這一點。內循環內部不允許進行函數調用。 – 2012-02-23 10:41:54
在大多數現代CPU上,正確預測並且不需要計算的'if'基本上是免費的。您是否猜測「引入額外的性能開銷」或者您是否測量過?保持代碼簡單,編譯器將優化它。 – 2012-02-23 10:47:43