Ihre Frage bezieht sich auf C++, nicht auf das Design. C++ unterstützt Dinge auf eine Art und Weise, weil es in Bezug auf Design Sinn macht. C++ erlaubt Ihnen, eine Menge Dinge zu tun, aber wenn Sie gute Software damit machen wollen, können Sie nicht nur an literalen C++ - Regeln festhalten, Sie müssen weiter gehen. In der Praxis bedeutet das, dass du am Ende deine eigenen Regeln aufstellst.
In Ihrem Fall - nun, ich würde nie die Referenzvariante machen, wenn ich nicht wirklich die Variable in der Funktion ändere.
Wenn Sie solche "Regeln" für sich selbst übernehmen, dann sehen Sie sofort, warum die Ref-Funktion nicht bindet: Was ist der Sinn, zuerst eine lose Konstante zu ändern?
Wenn Sie die richtigen Regeln treffen, werden Sie sehen, dass sie wunderbar von C++ unterstützt werden. Like ... Funktion ändert ein Objekt: pass non-const ref. Keine Änderung? const Wahlweise? Zeiger const. Übernahme der Speicherverwaltung? nicht-konstanter Zeiger
Beachten Sie, dass dies erst der Anfang ist, besonders wenn Multithreading ins Spiel kommt. Sie müssen Dinge zum "Vertrag" der Funktion hinzufügen. Beispiel für const ref: Muss das Objekt nach dem Aufruf 'am Leben' bleiben? Kann sich das Objekt während des Gesprächs ändern? Und so weiter.
_ "Wie foo2 aufrufen, die Referenzparameter übergeben?" _ Geben Sie eine Referenz? –
[Der Compiler wird sich über Mehrdeutigkeit beschweren] (http://ideone.com/W5eLdq), wenn Sie versuchen, den mehrdeutigen Anruf zu verwenden. –
Danke alle, Problem gelöst – kchpchan