こんにちは私は、リリース64ビットのリリースビルドでのみ奇妙なbehviorを与えている機能があります。 32bitはすべてのケースで動作し、64bitはデバッグで動作します。とにかく元のコードHERESに、値の値は、5または100等:などの実数であるIsNanとVS2010の値が64bitの場合
static void
Foo(char **pInOut, unsigned int key, double value)
{
if (value == -HUGE_VAL)
return;
if (value != value)
return;
// Does stuff that isn't happening
}
私が遊んでいたと私は値を置き換える=と値:!今
static void
Foo(char **pInOut, unsigned int key, double value)
{
if (value == -HUGE_VAL)
return;
if (_isnan(value))
return;
// Does stuff that happens now
}
それは働いている。値!=値はまだ有効ですか?私は何かを逃しています...私はちょうど古い方法が動作しない理由を見ていない?
これは64ビットビルドにのみ影響します。このコードは何年も存在しており、絶えず使用されていますが、今まで問題に遭遇したことはありませんでしたか? – user1198542
それはUBの問題です。突然それが起こらない限り、あなたが期待していることを正確に行います。だからあなたはそれを避けるべきです。 –