Frage

Was ist die einfachste und am wenigsten aufdringliche Art und Weise an den Compiler, um anzuzeigen, ob mittels Compiler-Optionen, #defines, typedefs oder Vorlagen, dass jedes Mal, wenn ich T sagen, ich meine wirklich T const? Ich würde es vorziehen, nicht die Verwendung eines externen Präprozessor zu machen. Da ich nicht das mutable Schlüsselwort das wäre akzeptabel sein umfunktionieren wandelbaren Zustand anzuzeigen.

Edit: Da die Absicht dieser irrte ganz (und da ich nicht in der Nähe war für ein paar Stunden zu klären), lassen Sie mich erklären. Im Grunde möchte ich nur wissen, was Systeme zur Manipulation des Typsystems zum Zeitpunkt der Kompilierung zur Verfügung stehen. Ich interessiere mich nicht, wenn diese nicht dem Standard entsprechende schafft, schlecht, wartbaren, nutzlos Code. Ich werde es nicht verwenden in der Produktion. Es ist nur eine Kuriosität.

Potential (suboptimal) Lösungen so weit:

// I presume redefinition of keywords is implementation-defined or illegal.
#define int int const
#define ptr * const
int i(0);
int ptr j(&i);

typedef int const Int;
typedef int const* const Intp;
Int i(0);
Intp j(&i);

template<class T>
struct C { typedef T const type; typedef T const* const ptr; };
C<int>::type i(0);
C<int>::ptr j(&i);
War es hilfreich?

Lösung

Nehmen Sie eine Open-Source-C ++ Compiler und ändern Sie es.

Ich denke, der Hauptgrund für den downvotes ist, dass die Leute denken Sie versuchen, C ++ zu ändern. Sagen Sie ihnen, anstatt Sie erstellen eine neue Sprache namens „C-const“ als Uni-Projekt.

Ich persönlich denke, es ist eine interessante Idee - Sie alle Arten von Leistung und Lesbarkeit Gewinnen aus unveränderlichen Typen gewinnen können -. Nur Blick auf den meisten funktionalen Sprachen

Andere Tipps

Auch wenn Sie in der Lage sind, dies zu tun (was ich vermute, Sie sind nicht), denkt über andere Leute Code zu lesen. Sie sind wahrscheinlich nicht verstehen, dass alles const und als Ergebnis sind nicht geeignet, den Code zu verstehen.

Versuchen Sie, den Compiler zu sagen, oder andere Leute sagen, zu lesen oder Ihren Code? Der Compiler wird nicht viel nichts anderes, nur weil ein Benutzer definierten Typ verwendet const ist. Wirklich, alles dies der Fall ist, den Satz von Methoden ändern (benutzerdefiniert oder implizit), die mit diesem Objekt verwendet werden können. Im Gegenzug, dass können kann der Compiler einige Optimierungen auf der Laufzeitdarstellung schließen.

Für class / struct Typen können Sie diese deutlich machen, sowohl für die Compiler und Benutzer einfach durch jedes Mitglied const machen:

class Point {
    // An immutable Point data object
    public:
        Point(int ix, int iy): x(ix), y(iy) { }
        Point(const Point& p): x(p.x), y(p.y) { }

        Point add(const Point& p) const;
        int taxiDistance() const;
        // etc... all const members

        const int x, y; // const can only be init'd at construction time

     private:
        Point& operator=(const Point& p); // never implemented!
}

Ich würde gegen diesen Rat. Wenn Sie es schaffen Sie Ziel jedermann zu erreichen (einschließlich man nach einiger Zeit) ist überrascht, als er den Code liest und es verhält sich anders, als er erwartet.

Bitte fügen Sie die const Modifikator Ebene für jedermann sichtbar, wo es gebraucht wird. Ihr Code wird mehr Lese Tarif wird oft dann geschrieben werden, es geht!

Sie können den Code Standard C ++ halten und entwickeln eine zusätzliche Schicht von Typprüfung.

Ein leerer Veraenderlich Makro könnte als Hinweis für den dienen konst checker . Explizite konst noch an Orten benötigt werden, um den Code der Kompilierung zu machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top