1

如果我编译以下代码:

#include <boost/range/irange.hpp>

template<class Integer>
auto iota(Integer last)
{
    return boost::irange(0, last);    
}

template<class Integer, class StepSize>
auto iota(Integer last, StepSize step_size)
{
    return boost::irange(0, last, step_size);    
}

int main(  )
{
    int y = 0;
    for (auto x : iota(5))
        y += x;
    return y;
}

使用 clang 3.9.0 和 GCC 6.3.0 at -O1,我得到了 GCC 的完全优化(只返回最终结果)和大量的 clang 输出代码。请参阅GodBolt 上的这个实验。但是,如果我将 clang 切换到-O2,它也会编译所有内容。

两种编译器模式之间的优化差异-O1会导致这种情况发生吗?

4

0 回答 0