008
07.01.2008, 22:19 Uhr
0xdeadbeef
Gott (Operator)
|
Nur so als einfaches Beispiel:
C++: |
#include <iostream> #include <string>
void print_size(std::string const &s) { std::cout << s.size() << std::endl; // std::string::size() ist const }
int main() { std::string s = "foo";
print_size(s);
// Hier wird implizit ein temporäres std::string-Objekt erzeugt, das // dementsprechend nur als konstante Referenz gebunden werden kann print_size("bar"); }
|
Speziell das hier ließe sich wohl auch mit einer Kopie verwirklichen, allerdings wäre das langsamer. Davon mal abgesehen kann es durchaus vorkommen, dass du nicht kopierbare Objekte kriegst (Streams sind zum Beispiel nicht kopierbar), bei denen eine Kopie schlicht nicht machbar ist. Boost.spirit zum Beispiel ist voll davon.
Ganz allgemein ist es guter Stil, const correctness zu wahren - wenn eine Funktion ein Objekt nicht verändert, übergib es als Konstante, dann weiß der aufrufende Programmierer gleich, dass das Objekt nicht verändert wird, und er kann seine eigenen Konstanten an sie übergeben. Wenn eine Methode ein Objekt nicht verändert, deklarier sie const, dann kann derjenige, der deine Klasse benutzt, sie auch als Konstante benutzen - und so weiter und so fort. Wenn du willst, dass dein Code auch mit anderen Bibliotheken funktioniert, solltest du dir das angewöhnen. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |