3

Der D-Programmiersprache Bezug zeigt zwei Beispiele in dem Declarations und Type Qualifiers Abschnitt, so dass diese beide möglich:Was ist der Unterschied zwischen unveränderlichen und konstanten Elementfunktionen?

struct S 
{ 
    int method() const 
    { 
     //const stuff 
    } 
} 

struct S 
{ 
    int method() immutable 
    { 
     //immutable stuff 
    } 
} 

die Dokumente:

Const Member-Funktionen sind Funktionen, die nicht erlaubt sind, Ändern Sie einen Teil des Objekts durch die Referenz dieser Funktion.

Und:

Immutable Mitgliederfunktionen garantiert werden, dass das Objekt und etwas von der dieser Referenz genannt ist unveränderlich.

Ich habe this question gefunden, aber alle Antworten sprechen über Datentypen, nicht über Speicherklassen. Das gleiche gilt für die D const FAQ, obwohl es eine interessante Lektüre ist.

Was ist der Unterschied zwischen den beiden oben genannten Definitionen? Gibt es Ausdrücke, die //const stuff ersetzen können und legal sind, aber nicht //immutable stuff?

Antwort

7

immutable Methoden können nur unter immutable Objekte aufgerufen werden. Sie können mit der Garantie * arbeiten, dass sich ihr Objekt (this) niemals ändert.

const Methoden können unter const, immutable oder veränderbaren Objekten aufgerufen werden. Sie garantieren, dass sie selbst ihr Objekt nicht ändern, aber andere Referenzen können das Objekt verändern.

würde ich mit const gehen, wenn Sie einen guten Grund haben immutable zu müssen, wie const Funktionen mit allen Speicherklassen drei Veränderlichkeit aufrufbar sind.


* Auf der Systemtypebene sowieso. Das Mutieren eines unveränderlichen Objekts ist möglich, verursacht jedoch undefiniertes Verhalten.