我们有一些看起来像这样的代码:
inline int calc_something(double x) {
if (x > 0.0) {
// do something
return 1;
} else {
// do something else
return 0;
}
}
不幸的是,当使用 flag 时/fp:fast
,我们得到了,calc_something(0)==1
所以我们显然采用了错误的代码路径。这只发生在我们在代码中的多个点使用不同参数的方法时,所以我认为编译器(Microsoft Visual Studio 2008,SP1)在这里进行了一些可疑的优化。
此外,当我们将界面更改为
inline int calc_something(const double& x) {
但我不知道为什么这会解决奇怪的行为。任何人都可以解释这种行为吗?如果我无法理解发生了什么,我们将不得不移除/fp:fast
开关,但这会使我们的应用程序变得相当慢。