我有两个函数void f(int x){...}
和 void g(int x){f(x);}
。我知道99%的情况下g()
接收到的参数是3或5。在f()
中,x
从不改变并监督很多循环和条件分支。以下代码是否比我的原始代码更快?
void g(int x)
{
if(x == 3) f(3);
else if(x == 5) f(5);
else f(x);
}
编译器(g++ -Ofast
)会将f(3)
和f(5)
分别编译,类似于编译两个模板参数吗?我还需要做什么才能让编译器更容易地认识到优化机会?声明void f(const int &x){...}
有帮助或必要吗?
f()
和/或g()
中,x
的值没有变化,最好将其作为const
传递。不确定是否能够提高性能,但肯定可以告诉编译器x
是不可变的状态。 - CinCout