内联功能会避免外部条件吗?

时间:2017-12-09 18:57:25

标签: c++ optimization inline

我想确认是否有可能出现某种优化。

// 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
    }
}

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

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

最后,我想知道(只有在可以进行优化的情况下)是否仅仅是"返回值优化"范例

1 个答案:

答案 0 :(得分:0)

如果__forceinline属性受到尊重,则您的代码等同于

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

如果你的条件是外部的,因为它是这个编译单元外部的变量,那么它们就无法被优化掉,因为它们的值在编译时是未知的。