のために、私は何をすべきデクリメント付き:「署名/符号なしの不一致」の警告(C4018)C++のようなコードで、「署名/符号なしの不一致」の警告についてループ
for (int i = vector.size() - 1; i >= 0; --i) // OK
{
if (i < vector.size()/2) // warning C4018: '<': signed/unsigned mismatch
// ...
}
(不自然な例が、それ問題を示しています。)
How do I deal with "signed/unsigned mismatch" warnings (C4018)?は、ループ変数にsize_t
を使用することを言いますが、これは0で終わるデクリメントループでは動作しません。これは、警告なしにコンパイルしますが、整数オーバーフロー(またはそれがアンダーフローしているのですか?)で、ランタイムになり、4294967295になります。
このコードで何か問題はありません。その効果についてのあなたの理解は正しい。この警告は、コンパイラライターの意見よりも、コードの詳細を知っているときに無視できる、良いスタイルのコンパイラーライターの概念の一部です。 –
@EMO:ベクトルを逆向きに反復するには、 'vector.crbegin()'を使ってみてください。 – JVApen
高いWTF /分が必要な場合は、 'for(unsigned int i = vector.size() - 1; i