Binding a temporary to a const lvalue reference fails



  • ja genau, mit Pointern geht das, das Buch nennt aber den .Operator für den Zugriff auf die Methode, dh. ich muss hier von einer Referenz ausgehen

    Das geht nur über Referenz, wenn die Objekte (inklusive dem special case object) irgendwo anders am Leben erhalten werden, z.B. in einem Container.

    Wenn dich der Punkt wirklich mental fertig macht, kannst du meinetwegen das machen:

    CustomerPtr pcustomer=...
    auto& customer=*pcustomer;
    if (customer.isPersistable())...
    


  • eine statische Variable wäre auch noch eine Idee



  • ;seh schrieb:

    ja genau, mit Pointern geht das, das Buch nennt aber den .Operator für den Zugriff auf die Methode, dh. ich muss hier von einer Referenz ausgehen

    Das geht nur über Referenz, wenn die Objekte (inklusive dem special case object) irgendwo anders am Leben erhalten werden, z.B. in einem Container.

    Wenn dich der Punkt wirklich mental fertig macht, kannst du meinetwegen das machen:

    CustomerPtr pcustomer=...
    auto& customer=*pcustomer;
    if (customer.isPersistable())...
    

    wieso mental fertig macht? ich habe nur den fehler im buch entdeckt



  • Sorry, ich sehe den Fehler nicht.

    Da steht ja was von "statement like the following" - es ist also klar, dass es sich hier um ein Beispiel handelt. Vielleicht entspringt dieses Beispiel einer Funktion saveCustomer(const Customer& customer) . Der Punkt ist ja gerade, dass man keine nullptr hat und man daher eine solche Funktion immer aufrufen kann. Wäre der Parameter ein const Customer* , hätte man doch wieder einen zwangweisen nullptr-Check. Ich halte es also sogar für besser so, wie es im Buch steht.


Anmelden zum Antworten