class MyClass
{
public:
MyClass()
{
m_dbLoopStart = 0.0;
m_dbLoopStop = 100.0;
m_dbLoopStep = 0.001;
}
// Which of the following methods complete in a shorter time?
void Foo1() const // This one?
{
for (double x=m_dbLoopStart; x<=m_dbLoopStop; x+=m_dbLoopStep)
{
f(x);
}
}
void Foo2() const // Or, this one?
{
for (double x=m_dbLoopStart; x<=m_dbLoopStop; x+=m_dbLoopStep)
{
2.0 * x + 1.0;
}
}
private:
double m_dbLoopStart, m_dbLoopStop, m_dbLoopStep;
inline static double f(double x)
{
return 2.0 * x + 1.0;
}
};
在 Foo1()
和 Foo2()
之间,哪个完成得更快?
最佳答案
在这种情况下,使用“内联”是多余的,因为类定义中定义的函数默认是内联的。
话虽如此,将函数定义为内联并不意味着该函数必须内联,而不将其定义为内联并不意味着编译器不会内联该函数。
正如其他人已经说过的,在这种情况下,它不会有什么不同,随着优化,甚至循环应该被优化为没有代码,x 被分配 m_dbLoopStop 的值(无论 x 可能是什么)。
关于c++ - 使用内联函数是否与直接在代码中编写函数体一样快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8712967/