c++ - 使用内联函数是否与直接在代码中编写函数体一样快?

标签 c++ performance optimization inline-functions code-size

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/

相关文章:

c++ - 从 ‘arma::umat’ 到 ‘arma::mat’ 的转换

performance - 为什么 SQLite 3.7.2 在 Step 操作上比 3.7.9 快 3 倍

c# - 为 LINQ 伪造 IGrouping

c++ - Makefile——高效编译

c++ - 将 LPTHREAD_START_ROUTINE 转换为 int

c++ - 数组 C++ 中的大括号初始化

c - 在 Unix/Linux 上用 C 测量一段代码占用的 CPU 时间

python - Aerospike - Python 客户端 - NoSQL 基准测试

c++优化2行关键代码

c++ - 将 Bitshift 优化为数组