Seite 1 von 1

static_cast - Wieso ist VisualStudio unzufrieden?

Verfasst: 23.06.2020, 20:17
von starcow
Abend zusammen :-)

Ich hab hier eine Situation, die ich mir nicht erklären kann.

Code: Alles auswählen

double y = grid * static_cast<double>(i + offset.y)
"i" und "offset.y" sind beides int Variablen.
Visual Studio unterlegt mir diese aber mit einer grünen Wellen-Line und meint:
C26451: Arithmetic overflow: Using operator '+' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling '+' to avoid overflow.
Soll ich jetzt beide Variablen separat casten und dann zusammen zählen? Ist das nicht etwas unelegant, weil ineffizient? Ich sehe auch nicht ganz, was dass für einen Unterschied machen soll...
Einziger Erklärungsversuch den ich habe:
Wenn die beiden Variablen zusammen addiert grösser als 4294967295 sein sollten, gäbs einen Überlauf, bevor nach "double" gecastet würde.
Nur das Risiko besteht ja ohnehin immer, wenn ich zwei int's addiere.

Gruss starcow

Re: static_cast - Wieso ist VisualStudio unzufrieden?

Verfasst: 23.06.2020, 22:20
von Spiele Programmierer
Ich glaube, das siehst du schon richtig. Der hypothetische Bug den VS hier bemängelt ist genau dieser Überlauf (und schon bei +2147483647 übrigens).

Man kann das übrigens abschalten unter "Tools" -> "Options" -> "Text Editor" -> "C/C++" -> "Advanced" -> "Code Analysis" -> "Disable C++ Code Analysis Experience" auf "true". Als es noch angeschaltet war, hat auch immer bei mir der Lüfter wie blöd gerödelt.

Relevant:
Bild

Re: static_cast - Wieso ist VisualStudio unzufrieden?

Verfasst: 25.06.2020, 13:02
von starcow
Stimmt! Danke für die Korrektur! :-)
Sollte ich nun dem "Wunsch" von Visual-Studio entsprechen und zwei seperate cast's ausführen - oder wäre das dann Verschwenderisch und unästhetisch?

LG
starcow

Re: static_cast - Wieso ist VisualStudio unzufrieden?

Verfasst: 25.06.2020, 14:25
von Spiele Programmierer
Ich würde das ignorieren. An dem Code ist nichts auszusetzen und wie du schon selbst sagst ist die Alternative sogar objektiv (marginal) schlechter. Ich glaube man kann in den Projekteinstellungen auch irgendwie einzelne Checks deaktivieren. Wenigstens das.

Ansonsten halt einfach beobachten, wie oft die Unterringelung ablenkt vs. wie oft ein Fehler aufgedeckt wird, den man selbst übersehen hätte. Mein persönlicher Eindruck war da jetzt nicht so positiv. Bei einer "offline" statischen Analyse kann man die False Positives wenigstens einfach kurz durchscrollen, aber diese permanenten grünen Unterringelungen finde ich nervig.