我的問題涉及在C++中對函數包裝器進行內聯優化的應用,請考慮以下代碼,WorkerStructure對象使用封裝了某些功能塊的函數包裝器進行初始化。然後在調用WorkerStructure :: doSomeWork方法時使用函數包裝器。限制在C++中內聯函數包裝器
將當在WorkerStructure :: doSomeWork法塗布由workerFunction對象封裝的功能性被內聯?,很明顯,如果該功能是在其它一些翻譯單元所定義的,workerFunction對象只封裝了一個函數指針,是否有任何其他情況下內聯將不可能?
當在不同的翻譯單元中定義的lambda函數通過函數包裝器傳遞時,它是否等價於傳遞函數指針?
struct WorkerStructure
{
WorkerStructure(std::function <bool(float)> &f):workerFunction(f) {}
void doSomeWork(float inputValue)
{
if(workerFunction(inputValue))
{
//do some conditional operation
}
}
std::function <bool(float)> workerFunction ;
};
它強烈依賴於編譯器和優化標誌。 FYI最近GCC(即4.7)具有鏈接時優化能力(編譯**和** *鏈接*與'gcc -flto -O2') –
Cool!,不知道flto,我正在試驗很多用lambda函數,我非常喜歡他們給我的靈活性,但我不喜歡接受任何性能下降,因此是個問題。 –
我最近把代碼中的大部分代碼轉換成了在gcc 4.7.0中使用lambdas而沒有遇到性能問題(我基本上用for_each_obj替換了一些自我創建的迭代器類對象來訪問複雜的數據結構(lambda)',其中'for_each_obj'模板由數據結構提供,允許更好地優化循環邏輯)。 – Walter