4 Stimmen

Vergleichsfehler vorzeichenlos/vorzeichenbehaftet löschen

Im Allgemeinen möchte ich Warnungen von unsigned vs signiert.

In diesem speziellen Fall möchte ich jedoch, dass sie unterdrückt wird;

std::vector<Blah> blahs;

for(int i = 0; i < blahs.size(); ++i) { ...

Ich möchte diesen Vergleich beenden.

Danke!

(unter Verwendung von g++)

12voto

GManNickG Punkte 476445

Man sollte sie reparieren, nicht unterdrücken. Verwenden Sie einen Typ ohne Vorzeichen:

for (size_t i = 0; i < blahs.size(); ++i)

Sie können auch Folgendes verwenden unsigned aber size_t ist hier besser geeignet (und hat möglicherweise eine andere, größere Reichweite). Wenn Sie nur i zu iterieren und seinen Wert nicht in der Schleife zu benötigen, verwenden Sie stattdessen Iteratoren:

for (auto iter = blahs.begin(), end = blahs.end(); iter != end; ++iter)

Wenn Ihr Compiler keine Unterstützung für auto ersetzen auto avec T::iterator ou T::const_iterator , donde T ist der Typ von blahs . Wenn Ihr Compiler jedoch eine umfassendere Teilmenge von C++11 unterstützt, tun Sie dies:

for (auto& element : blahs)

Das ist das Beste von allem.


Streng genommen ist die obige Formulierung nicht "korrekt". Sie sollte lauten:

typedef std::vector<Blah> blah_vec;
blah_vec blahs;

for (blah_vec::size_type i = 0; i < blahs.size(); ++i)

Aber das kann langatmig sein, und jede mir bekannte Implementierung verwendet size_t como size_type sowieso.


Wenn Sie aus irgendeinem Grund wirklich einen vorzeichenbehafteten Integer-Typ für i müssen Sie werfen:

// assumes size() will fit in an int
for (int i = 0; i < static_cast<int>(blahs.size()); ++i)

// assumes i will not be negative (so use an unsigned type!)
for (int i = 0; static_cast<size_t>(i) < blahs.size(); ++i)

// and the technically correct way, assuming i will not be negative
for (int i = 0; static_cast<blah_vec::size_type>(i) < blahs.size(); ++i)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X