009
13.09.2007, 00:04 Uhr
0xdeadbeef
Gott (Operator)
|
Über die Sinnhaftigkeit von using-Direktiven kann man lange und ziemlich ergebnislos streiten, und jeder hat dazu seine eigene Meinung.
Generell ist es zweifelhaft, using-Direktiven im globalen Kontext in Header-Dateien zu verwenden, weil man nie genau weiß, wo die Header nachher mal eingebunden werden - und damit erschöpft sich im Grunde auch der Konsens. Wogegen meines Erachtens nichts spricht, ist, sie im lokalen Kontext zu benutzen - das heißt
C++: |
void foo() { using namespace std;
cout << "foo" << endl; }
|
Obwohl ich an der Stelle persönlich auch eher den namespace ausschreibe, oder, bei langen Namen Aliases definiere - zum Beispiel
C++: |
void meine_kleine_parserfunktion() { namespace bs = boost::spirit;
bs::parse(/* ... */); }
|
Zankapfel ist bei sowas eher die Verwendung im globalen Kontext in Source-Dateien - es macht in der Praxis einige Dinge einfacher (halt weniger Tipparbeit), und andere komplizierter. Wenn man zum Beispiel Code hin- und herkopiert (und ja, mir ist bewusst, dass das nicht unter "best practice" läuft, aber in der Praxis kommt sowas gelegentlich schonmal vor), der dann doppeldeutige Symbole beinhaltet, kriegt man auf die Art schon mal unerwartete Fehler. Ich lass sowas generell sein, aber andere sehen das anders, und recht haben eigentlich beide - es ist halt Ansichtssache. Meine persönliche Motivation ist bei sowas halt, dass ich nachher beim Lesen des Codes sofort sehe, woher ein Symbol kommt - das hat mir auf lange Sicht meistens geholfen, Code, den ich nach Jahren noch mal anfassen musste, schneller wieder zu durchschauen.
Im Übrigen handelt es sich hierbei um eine Standard-C++-Frage, also -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 13.09.2007 um 00:08 Uhr von 0xdeadbeef editiert. |