2016-10-21 8 views
-1

Ich frage mich, ob Umwandlung wie:lange lange lange lange Umwandlung in int und int

int to long

int to long long

long to int

long long to int

long long to long

long to long long

und

long double to double

double to long double

(und analog für unsigned) sind teure Operationen. Sollten wir uns über diese Konvertierung Gedanken machen und geeignete Typen für die Zuweisung definieren? (Natürlich besteht die Gefahr der Verlustpräzision, aber ich schreibe nicht darüber. Ich frage nach Leistung).

Zum Beispiel, wenn ich sicher bin, dass die Nummer in int Typ gespeichert werden kann. Und ich muss etwas in Funktion zuweisen wie: void writeToX(long long& x).

Ist es wichtig, die Funktion long long x anstelle von int x zu übergeben?

+0

Sie können 'int x;' übrigens nicht an 'void foo (long long &)' übergeben. – DeiDei

+0

Warum versuchst du es nicht und findest es heraus? Sehen Sie sich Assembly an oder erstellen Sie ein Testprogramm und sehen Sie, ob es langsamer läuft. – Hayt

+1

"Ist es wichtig, lange long x statt int x zu übergeben?" Es ist wichtig, die richtige Größe der Variablen zu verwenden. – UKMonkey

Antwort

5

Sie sollten immer versuchen, Typumwandlungen zu vermeiden, da sie normalerweise auf einen schlechten Programmierstil hinweisen.

Dies ist unabhängig von den Kosten einer Konvertierung, aber beachten Sie, dass einige dieser Konvertierungen, die Sie aufgelistet haben - insbesondere von und zu Fließkommazahlen - nicht besonders günstig sind.

In C++ ist das Verhalten beim Konvertieren in einen Typ, der den Wert nicht halten kann, oft undefiniert. So muss eine sichere Konvertierung oft mit der Größenprüfung implementiert werden, was nur zu den Kosten beiträgt.

+0

"Überprüfung der Größe, die nur zu den Kosten beiträgt" - behauptet, Sie sind Ihr Freund, wie Sie mit den Ausgaben nur auf Debug-Builds angewendet bekommen können – UKMonkey