for(unsigned int i = 0; i < x.size(); i++)
assert(x[i] > 0);
デバッグしない場合 (NDEBUGフラグ)、結果は空のforループになります。これを処理するクリーンな方法はありますか (空のforループを実行しないでください); assertそもそもの目的を無効にするため、できればプリプロセッサ ディレクティブを使用しないでください。
for(unsigned int i = 0; i < x.size(); i++)
assert(x[i] > 0);
デバッグしない場合 (NDEBUGフラグ)、結果は空のforループになります。これを処理するクリーンな方法はありますか (空のforループを実行しないでください); assertそもそもの目的を無効にするため、できればプリプロセッサ ディレクティブを使用しないでください。
inline bool all_positive(std::vector<int> const &x)
{
for (size_t i = 0; i < x.size(); i++)
if (x[i] <= 0)
return false;
return true;
}
それから
assert(all_positive(x));
(ただし、 が定義されていると、「未使用の関数」という警告が表示される場合NDEBUGがあります)。
優れたオプティマイザーは、 が定義されているときにループ全体を排除できるはずNDEBUGです (私はちょうど私のものをテストしましたが、そうしています)。
#ifndef NDEBUGまたは、ループ全体を/で囲むこともできます#endif。あなたはこれを「assertそもそもの目的を破るだろう」と言いますが、私はその理屈にはあまり従いません。
assertNDEBUGが定義されている場合、ステートメントはノーオペレーションになります。ループ全体で同様のことを行うには、次のようにします。
#ifndef NDEBUG
for(unsigned int i = 0; i < x.size(); i++)
assert(x[i] > 0);
#endif