002
26.01.2007, 00:57 Uhr
0xdeadbeef
Gott (Operator)
|
Erstens, wie blubber schon sagte, die Reihenfolge stimmt nicht und zweitens, du benutzt Postinkrements.
ließe sich auch als
schreiben. Im Gegensatz dazu ist das Präinkrement, also
äquivalent zu
Generell ist es in C++ guter Stil, das Präinkrement zu benutzen, wo es keinen Unterschied macht, d.h. z.B.
C++: |
for(int i = 0; i < 10; ++i) do_stuff();
|
statt
C++: |
for(int i = 0; i < 10; i++) do_stuff();
|
weil im Fall komplexer Datentypen das Präinkrement typischerweise einen Kopierkonstruktor bei der Rückgabe spart, z.B.
C++: |
class foo { public: foo(int x = 0) : x_(x) { }
void val(int x) { x_ = x; } int val() const { return x_; } foo &operator++() { // Präinkrement ++x_; return *this; }
foo operator++(int) { // Postinkrement foo ret(x_); // 1. Hier ein Extra-Objekt ++x_; return ret; // 2. Kopie bei der Rückgabe } private: int x_; };
|
Hier ist
effizienter als
von besonderem Interesse ist das natürlich bei Funktionstemplates, a la
C++: |
template <typename number_t> number_t &increment(number_t &x) { return ++x; }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 26.01.2007 um 01:03 Uhr von 0xdeadbeef editiert. |