想知道以下是否让任何人感到惊讶,就像它对我一样?Alex Allain 在这里使用constexpr 的文章显示了以下因子示例:
constexpr factorial (int n)
{
return n > 0 ? n * factorial( n - 1 ) : 1;
}
Run Code Online (Sandbox Code Playgroud)
并指出:
现在你可以使用factorial(2),当编译器看到它时,它可以优化掉调用并在编译时完全进行计算.
我在VS2015中以释放模式尝试了这一点,并对(/ Ox)进行了全面优化,并逐步查看调试器中查看程序集的代码,并看到在编译时没有进行因子计算.
使用GCC v5.4.0和--std = C++ 14,我必须在编译时执行计算之前使用/ O2或/ O3.我很惊讶,在编译时没有使用/ O计算.
主要问题是:为什么VS2015在编译时没有执行此计算?