Hallo,
Ich habe mal wieder eine unwichtige prinzipielle Frage:
Für herkömmliches C++: was ist besseres C++ bzw. schneller?
int i = 42;
float a = (float)i;
float b = float(i);
float c = static_cast(i)
Grüße
Chris
Hallo,
Ich habe mal wieder eine unwichtige prinzipielle Frage:
Für herkömmliches C++: was ist besseres C++ bzw. schneller?
int i = 42;
float a = (float)i;
float b = float(i);
float c = static_cast(i)
Grüße
Chris
Hallo Chris,
Ich habe mal wieder eine unwichtige prinzipielle Frage:
Für herkömmliches C++: was ist besseres C++ bzw. schneller?int i = 42;
float a = (float)i;
float b = float(i);
float c = static_cast(i)
Was schneller ist, hängt auch von deinem Compiler ab.
Also mach mal 3 Schlaufen (um die Optimierung auszutricksen deklarierst du a,b,c als volatile).
Jede Schleife sollte die Zuweisung so 1’000’000 mal machen und du stoppst die Zeit für jede Schlaufe.
MfG Peter(TOO)
Hallo,
es gibt keinen wirklichen Geschwindigkeitsunterschied zwischen dem
C Cast Operator und der static_cast Variante. Vielmehr ist
static_cast beschränkt auf eine bestimmte Art der Konvertierung.
Du kannst mit static_cast z.B. keinen Zeiger einer nicht Zeiger-
variablen zuweisen. Dafür müsstest du einen reinterpret_cast
verwenden. C++ Casts sind also in erster Linie dazu da, um deinen
Code übersichtlicher zu machen. Zudem hab ich mal gehört, dass sie
unästhtetischer aussehen, mehr Tipparbeit machen und man seinen Code
deshalb sorgfältiger planen würde um eine Alternativlösung zu
finden
Gruß
Marcus
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
Ich habe mal wieder eine unwichtige prinzipielle Frage:
Für herkömmliches C++: was ist besseres C++ bzw. schneller?int i = 42;
float a = (float)i;
float b = float(i);
float c = static_cast(i)
Visual Studio macht daraus folgendes.
7: int main(int argc, char* argv[])
8: {
00401010 55 push ebp
00401011 8B EC mov ebp,esp
00401013 83 EC 50 sub esp,50h
00401016 53 push ebx
00401017 56 push esi
00401018 57 push edi
00401019 8D 7D B0 lea edi,[ebp-50h]
0040101C B9 14 00 00 00 mov ecx,14h
00401021 B8 CC CC CC CC mov eax,0CCCCCCCCh
00401026 F3 AB rep stos dword ptr [edi]
9:
10: int i = 42;
00401028 C7 45 FC 2A 00 00 00 mov dword ptr [ebp-4],2Ah
11:
12: float a = (float)i;
0040102F DB 45 FC fild dword ptr [ebp-4]
00401032 D9 5D F8 fstp dword ptr [ebp-8]
13: float b = float(i);
00401035 DB 45 FC fild dword ptr [ebp-4]
00401038 D9 5D F4 fstp dword ptr [ebp-0Ch]
14: float c = static_cast(i);
0040103B DB 45 FC fild dword ptr [ebp-4]
0040103E D9 5D F0 fstp dword ptr [ebp-10h]
15:
16:
17:
18: return 0;
00401041 33 C0 xor eax,eax
19: }
00401043 5F pop edi
00401044 5E pop esi
00401045 5B pop ebx
00401046 8B E5 mov esp,ebp
00401048 5D pop ebp
00401049 C3 ret
Wie du siehst sind alle drei Varianten identisch und das
schon in der Debug Version.
Gruß
Stefan
Danke für die Antworten! Chris