3

vector を使用して何かを行っていますが、次の条件が false と評価されていることがわかりました。これは理解できませんでした。

コードは次のとおりです。

#include "stdio.h"
#include <vector>

using namespace std;

int main()
{
   // an empty vector
   vector<int> v;

   // print 0
   printf ("size of the vector is %d \n", v.size());

   // the condition is false, why?
   if (0 > v.size()-1) {
       printf ("it should occur \n");
   }
}
4

4 に答える 4

11

これは、署名付きと未署名を混在させるとどうなるかです。整数型である a をv.size()返します(ほとんどの場合、 の typedef であると同じです)。負の数になることは決してないため、ラップアラウンドします。size_typeunsignedstd::size_tunsigned long (long)v.size()-1

warningsを有効にすると、コンパイラは、符号付きと符号なしが混在していることを通知します。GCCの場合-Wall、関連する警告 (これは-Wsign-compare)を有効にします。

于 2013-09-15T15:18:53.840 に答える
3

v.size()は unsigned 型の値を返すため、が非常に大きな正の数でv.size()あることを意味します。0v.size()-1

于 2013-09-15T15:18:44.520 に答える
2

の戻り値の型v.size()は符号なし型です。std::vector<int>::size_typeこれは と同等std::size_tです。負の値の概念がないため、符号なし整数はラップアラウンドします。

于 2013-09-15T15:18:31.103 に答える