const

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Moin!

    Ich habe mal ne Frage zu "const"!

    Ich habe mich auch schon darüber informiert und komme trotzdem durcheinander.

    3 Probleme:

    1.
    int bla(const Mensch &m1, const Mensch &m2)

    In meinem Buch steht, dass es konstante Referenzen sind.
    Dabei bezieht sich das const doch auf das Objekt,oder?!
    Also, dass die Referenz geändert werden kann, aber das Objekt selbst nicht.

    2.
    void Matrix::multi(const Matrix &matrix2)

    hier bezieht sich doch auch das const auf das Objekt Matrix,oder?!
    Ich will damit bezwecken, dass das Objekt, dass dieser Funktion übergeben wird, nicht mehr geändert wird.

    3.
    void bla(matrix const&;)

    hier bezieht sich jetzt doch das const auf die Referenz,oder?!
    also die referenz kann nicht geändert werden.
  • phax schrieb:

    Quellcode

    1. (Matrix const& x)

    und

    Quellcode

    1. (const Matrix& x)

    sind identisch!
    Während man bei Ptrn aber aufpassen muss:

    Quellcode

    1. (Matrix const* x)


    und

    Quellcode

    1. (Matrix *const x)


    sind NICHT identisch!

    Nach dem, was ich in Herb Sutters "Exceptional C++" gelesen habe ist folgendes nicht portable - sprich nicht ISO-C++:

    Quellcode

    1. (Matrix const* x)

    richtiger hier:

    Quellcode

    1. (const Matrix * x)
    There are only 10 types of people in the world: Those who understand binary, and those who don't.

    Download meines ersten Spiels:HIER
    Über Feedback würde ich mich freuen ;)
  • Um die Fragen auf den Punkt zu bringen:
    Das "const" bezeiht sich auf den Typ "Matrix&" welcher vom Compiler intern in einen Pointer aufgelöst wird.
    Die Referenz dient nur der einfacheren Programmierung, und es muss kein Check auf NULL durchgeführt werden.
    Das "const" bedeutet nur, dass das referenzierte Objekt nicht verändert werden darf, d.h. es dürfen nur "const" Methoden aufgerufen werden, bzw. nur lesend auf Member zugegriffen werden.
    -- Alles klar?
    There's no place like 127.0.0.1
  • Das ist aber ein Spezifikum des Microsoft Compilers, da er implizit eine Variable anlegt und deren Adresse übergibt.
    Aber eigentlich ist diese Schreibweise eher unvorteilhaft, da innerhalb der Funktion (im generierten Maschinencode) immer eine Dereferenzoerung passiert.
    Geschickter wäre einfach die Schreibweise

    Quellcode

    1. void abc (int x)

    bzw.

    Quellcode

    1. void abc (const int x)
    There's no place like 127.0.0.1