【问题标题】:Will inline function avoid external condition?内联函数会避免外部条件吗?
【发布时间】:2017-12-09 18:57:25
【问题描述】:

我想确认我想到的某种优化是否可行。

// test.h
class Test
{
public:
    static void Main();

private:
    __forceinline static bool func1()
    {
        return ((externalCond1 && externalCond2) ? true : false);
    }
}

// test.cpp
#include "test.h"

void Test::Main()
{  
    if(func1() == true)
    {  
        //Do something
    }
}

由于内联的func1Main 的条件是否会被优化掉,并阻止它被实际测试? (导致只测试func1内的条件)。

这只是一个示例代码。但是,由于我真正的内联函数反正就是这么短,我会简单地将func1 中的条件复制到所有想要调用这个函数的地方,如果事实证明这种优化是不可能的。

最后,我想知道(仅在可以优化的情况下)它是否只是“返回值优化”范式的一个案例。

【问题讨论】:

  • C++ 编译器允许但不是必需的,以采用任何没有明显效果的优化。您想要的优化没有可观察到的效果。您的 C++ 编译器可能会或可能不会实现此优化,由其自行决定。允许这样做,但不是必须这样做。通常,是否进行此优化取决于您在编译代码时选择的特定编译选项。

标签: c++ optimization inline


【解决方案1】:

如果__forceinline 属性被接受,你的代码相当于

void Test::Main()
{  
    if (((externalCond1 && externalCond2) ? true : false) == true)
    {  
        //Do something
    }
}

如果您的条件是外部变量,即编译单元外部的变量,那么它们不能被优化掉,因为它们的值在编译时是未知的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多