ich ein Problem habe, die ich bin sicher, einfach zu beheben, aber ich bin ratlos ...Fixing „Vergleich ist immer falsch ...“ Warnung in GCC
ich eine Vorlage haben, die (immer falsch ist aufgrund der begrenzten Reichweite von DatentypVergleich), wenn dieser Code kompiliert wird für einen Typ ohne Vorzeichen
T value = d;
if (std::numeric_limits<T>::is_signed)
{
if (value < 0)
{
*this += _T("-");
value = -(signed)value;
}
}
Nun denn offensichtlichen Gründen ist GCC mir eine Warnung zu geben: führt den folgenden Code ein. Ich verstehe voll und ganz die Gründe dafür und ich habe die numeric_limits-Prüfung durchgeführt, um zu sehen, ob ich den Compiler dazu bringen könnte, den Mund zu halten (es funktionierte für MSVC). Ach, unter GCC bekomme ich die Warnung. Gibt es eine Möglichkeit, diese Warnung zu beheben (kurz vor dem Deaktivieren der Warnung, die ich nicht einmal weiß, wenn Sie mit GCC tun können)? Der Code wird sowieso nie aufgerufen und ich nehme an, der Optimierer wird es auch kompilieren, aber ich werde die Warnung nicht los.
Kann mir jemand eine Lösung geben?
Prost!
Dies ist sehr böse, wenn "Int" 16 Bit ist. Wenn "value" ein long ist, schneidet "value = - (signed/* int * /) value" größere Werte ab. Multiplizieren Sie stattdessen mit -1, und lassen Sie es vom Optimierer herausfinden. – MSalters