整数の可能なすべての値を繰り返したいと思っています。終了条件が偽になることはありませんので、このコードは動作しません:符号なし整数のすべての値を反復する最も簡単な方法
for (uint32_t i = 0; i <= 0xFFFFFFFF; i++)
std::cout << i << std::endl;
私はこれを作ってみた:
auto loopBody = [](uint32_t value)
{
std::cout << value << std::endl;
};
uint32_t last = 0xFFFFFFFF;
for (uint32_t i = 0; i < last; i++)
loopBody(i);
loopBody(last);
それはしかし、かなり醜いです。これを行うにはもっときれいな方法がありますか?
を使用することを意味しているたぶん、あなたは0x100000000' 'に' int64_t'インデックスとループを使用することができます?、ループの終わりに条件テストのために呼び出しますか – zneak
'std :: numeric_limits :: max()'を使用してください。符号付き整数のオーバーフローは未定義の動作であることに注意してください。 –
kec
「可愛さ」は任意です。私はちょうどループを持っていると思うし、余分なstd :: cout文はそれを行う関数を定義するよりもきれいです。それがあまりにもバグがあるなら、オーバーフローしないより大きなデータ型を使用するというzneakの提案を使用してください。次に、大きなデータ型をループする必要がある場合、同じ問題が発生します。 –