我的问题涉及在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