Machen Sie alle Typen Konstante durch Standard in C ++
-
02-10-2019 - |
Frage
Was ist die einfachste und am wenigsten aufdringliche Art und Weise an den Compiler, um anzuzeigen, ob mittels Compiler-Optionen, #define
s, typedef
s 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);
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.