Operator überladung
-
Hallo ich habe hier ein Code Beispiel von Bjarne Stroustrup was für einen Sinn macht es hier month_tbl statisch zu machen?
#include <iostream> using namespace std; enum Month { jan=1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dcm }; Month operator++(Month& m) { m = (m==dcm)? jan : Month(m+1); return m; } ostream& operator << ( ostream &os, Month m ) { static const char* month_tbl[12] = { "January","February","March","April","May","June","July", "August","September","October","November","December" }; return os << month_tbl[ m-1 ]; } int main() { Month m = sep; ++m; // m becomes oct ++m; // m becomes nov ++m; // m becomes dec ++m; // m becomes jan ("wrap around") cout<<m <<endl; return 0; }
-
Vermutlich, damit month_tbl
1. nicht zusätzlichen Stack-Speicher verbraucht (was nicht schlimm wäre)
2. nicht bei jedem Aufruf neu initialisiert werden muss
-
Ich finde es auch komisch, da das eigentlich sowieso jeder Compiler optimieren müsste.
@wxSkip: Deine zwei Punkte sind dieselben (RAII
)
-
So weit kommts noch, dass man sich auf Compileroptimierungen verlässt, wenn man sie mit geringem Aufwand garantiert hat ...
-
Ethon schrieb:
So weit kommts noch, dass man sich auf Compileroptimierungen verlässt, wenn man sie mit geringem Aufwand garantiert hat ...
Heul doch nicht, Ethon! Ich werde doch auch nicht RVO "selbst garantieren", das wäre lächerlich.
-
RVO und das sind schon zwei völlig unterschiedliche Klassen von Optimierungen (erstere würde ich nichtmal so nennen, wenn sie nicht offiziell so heißen würde).
-
Na gut, vielleicht würde sowas nicht optimiert werden. Ist eigentlich aber egal, die Frage von TE dürfte beantwortet sein ^^