【发布时间】:2013-02-05 17:39:34
【问题描述】:
我有一组仅算术函数,它们的调用不是在编译时确定的,而是在运行时确定的。我打算创建一个指向所有指针的数组,并通过数组索引处理它们的调用(例如,如果(a> 3)调用第三个)。
这些函数将在循环中被大量重复调用,因此必须内联它们以提高性能。
我的问题是,这种通过内联成员函数指针的调用最终会被内联吗?
谢谢!
class foo{
private:
int f(int x){return x;}
int (foo::*pf)(int);
public:
foo(){
pf=&foo::f;
(*this.*pf)(3); //will this call be inlined?
f(3); //this call is surely inlined
}
};
int main(){
foo f;
return 0;
}
【问题讨论】:
-
如果在编译时无法确定它们如何被内联?
-
我的理解是:if(a>3){f2(x)}else{f1(x)}。这就像只是通过替换进行的预处理。
-
如果内联如此重要,您可以考虑使用开关。
-
@Mysticial:总的来说你是对的,但我担心他可能会通过优化器运行他的代码,发现它是内联的,然后回来大喊它确实。上面的测试用例是trivial,编译器知道
pf指的是int f(int),所以它在编译时known。 -
g++ -S。只是说。
标签: c++ inline member-function-pointers