@Marc 'BlackJack' Rintsch:
Du willst mir jetzt doch wohl nicht einreden, dass OOP-Code schneller ist als prozedualer Code.
Zu deinen Optimierungen am Code:
1.) t lokal –> OK.
2.) GetVar() inline –> Das hat wenig mit OOP zu tun, da "normale" Funktionen ebenfalls inline unterstützen. Um den Test objektiv bewerten zu können müssen also 2 gleichstark optimierte Codestücke her:
// c-test #include <cstdio> #include <ctime> using namespace std; inline unsigned int GetVar(); unsigned int i = 0; int main() { while(GetVar() < 400000000) {} printf("%d\n", clock()); return 0; } unsigned int GetVar() { i++; return i; }
// c++-test #include <cstdio> #include <ctime> using namespace std; class Test { public: Test(unsigned int x); unsigned int GetVar() {i++; return i;} private: unsigned int i; }; int main() { Test t(0); while(t.GetVar() < 400000000) {} printf("%d\n", clock()); return 0; } Test::Test(unsigned int x): i(x) {}
Ergebnis:
marcel@marcel-desktop:~/test$ ./c-test 2103 marcel@marcel-desktop:~/test$ ./c++-test 2743 --> 30 % Unterschied! Das war n Schuss in Ofen
Zu deinem Argument mit dem "absichtlich" langsamer machen:
In der Praxis werden eben Polymorphie und überladene Operatoren benutzt, was den Code verlangsamt.
Aber selbst bei einem Vergleich wie diesen schneidet "normaler" Code besser ab.
Zu eurem Problem mit clock():
Es ist völlig scheißegal, ob die Ticks/OP auf allen Plattformen gleich sind, solange ich ein Verhältnis daraus ableite!
Und um es jetzt endgültig klar zu machen:
JA! Ihr habt mich überzeugt, dass der Geschwindigkeitsvorteil den ich versuche zu erreichen bei GUI's verschwindent gering ist.
Zeitkritische Operationen würde ich aber trotzdem noch mit C schreiben, anstatt mit C++.
Gruß TheImaginator