當比較函數和仿函數,它經常被提及的是仿函數在一個函數的一個優點是仿函數是有狀態的。狀態數據VS全局函數
然而,在這段代碼,在我看來,一個功能可能是有狀態的了。那麼我在做什麼/理解錯誤?
struct Accumulator
{
int counter = 0;
int operator()(int i)
{
counter += i;
return counter;
}
};
int Accumulate(int i)
{
static int counter = 0;
counter += i;
return counter;
};
int main()
{
Accumulator acc;
std::vector<int> vec{1,2,3,4};
Accumulator acc2 = std::for_each(vec.begin(), vec.end(), acc);
int d1 = acc(0); // 0, acc is passed by value
int d2 = acc2(0); // 10
std::for_each(vec.begin(), vec.end(), Accumulate);
int d4 = Accumulate(0); // 10
return 0;
}
你怎麼建議你把它重新開始嗎? – chris
@chris:你能重新配製嗎? – Korchkidu
對於狀態使用'static'的函數,狀態將在任何/所有用途和調用之間共享。根據使用情況,您可能需要一些「重置」功能。對於仿函數,您可以輕鬆創建許多獨立的函數。 – crashmstr