Das Definieren von Typen zum Hinzufügen von Kontext in Ihrem Code ist akzeptabel und wird sogar empfohlen. Das Herumschrauben mit den Betreibern wird nur die nächste Person, die Ihren Code pflegen muss, ermutigen, eine Waffe in Ihr Haus zu bringen.
Nun, bedenkt die Neuankömmlinge, die an C ++ gewöhnt sind. Sie werden Schwierigkeiten haben, Ihr Projekt zu erhalten.
Beachten Sie, dass es viele Möglichkeiten für das effektivere Aliasing gibt. Ein gutes Beispiel sind komplizierte verschachtelte STL-Container.
Beispiel:
%Vor%Jetzt statt
%Vor%Sie können
schreiben %Vor%scheint klarer und leserlicher zu sein.
Wenn Sie es nur für überflüssige Umbenennungsfunktionen verwenden (im Gegensatz zu dem Beispiel, das @Vlad gibt), dann ist es Falsche Sache .
Es macht den Code definitiv weniger lesbar - jeder, der C ++ beherrscht, wird (x ? y : z)
sehen und wissen, dass es ein ternäres bedingter Operator . Obwohl ORLY x YARLY y NOWAI z KTHX
dasselbe sein könnte, verwirrte es den Betrachter: "Ist YARLY NOWAI
genau dasselbe wie ? :
, wurde für die Bequemlichkeit des Autors umbenannt, oder hat es feine Unterschiede " Wenn diese "Aliase" mit den Standardsprachelementen identisch sind, verlangsamen sie nur die nächste Person, die Ihren Code verwaltet.
TLDR: Das Lesen von Code, egal welcher Code, ist schwer genug, ohne ständig die private alternative Syntax nachschlagen zu müssen.
Das ist schrecklich. Tu es bitte nicht. Schreibe idiomatisches C ++, nicht irgendeine Makro-gespenstische Monstrosität. Im Allgemeinen ist es extrem schlecht, solche Makros zu definieren, außer in sehr speziellen Fällen (wie dem Makro BOOST_FOREACH
).
Das heißt, and
, or
und not
sind tatsächlich bereits gültige Aliase für &&
, ||
und !
in C ++!
Visual Studio kennt sie nur, wenn Sie zuerst den Standard-Header <ciso646>
einfügen. Andere Compiler brauchen das nicht.
Typen sind etwas anderes. Die Verwendung von typedef
zum Erstellen von Typaliasen abhängig vom Kontext ist sinnvoll, wenn die Aussagekraft des Codes erhöht wird. Dann ist es ermutigt. Es wäre jedoch noch besser, eigene Typen anstelle von Aliasen zu erstellen. Zum Beispiel kann ich mir nicht vorstellen, dass es jemals von Vorteil wäre, einen Alias für std::string
zu erstellen - warum nicht einfach std::string
direkt verwenden? (Eine Ausnahme sind natürlich generische Datenstrukturen und Algorithmen.)
"und", "oder", "nicht" sind OK, weil sie Teil der Sprache sind, aber es ist wahrscheinlich besser, C ++ in einem Stil zu schreiben, den andere C ++ - Programmierer verwenden, und nur sehr wenige verwenden es Sie. Aliasieren Sie sie nicht selbst: Sie sind reservierte Namen und es ist im Allgemeinen nicht erlaubt, reservierte Namen auch im Präprozessor zu verwenden. Wenn Ihr Compiler sie nicht im Standardmodus bereitstellt (dh es ist nicht standardkonform), könnten Sie sie mit #define
vortäuschen, aber Sie könnten sich in Zukunft auf Probleme einstellen Sie ändern den Compiler oder ändern die Compiler-Optionen.
typedefs für integrierte Typen kann unter bestimmten Umständen sinnvoll sein. Zum Beispiel gibt es in C99 (aber nicht in C ++ 03) erweiterte Integertypen wie int32_t
, die eine 32-Bit-Ganzzahl angeben, und auf einem bestimmten System, das ein typedef für int
sein könnte. Sie kommen von stdint.h
( <cstdint>
in C ++ 0x), und wenn dein C ++ - Compiler das nicht als Erweiterung anbietet, kannst du im Allgemeinen eine Version von ihr finden oder schreiben, die für dein System funktioniert. Wenn Sie einen bestimmten Zweck haben, für den Sie vielleicht in Zukunft einen anderen Integer-Typ verwenden möchten (vielleicht auf einem anderen System), dann verstecken Sie auf jeden Fall den "echten" Typ hinter einem Namen, der die wichtigen Eigenschaften beschreibt, die der Grund sind Sie haben diesen Typ für diesen Zweck ausgewählt. Wenn du nur denkst, dass "int" unnötig kurz ist und es "ganzzahlig" sein sollte, dann hilfst du niemandem, selbst dir selbst nicht, indem du versuchst, die Sprache so oberflächlich zu verändern. Es ist eine zusätzliche Indirektion für keinen Gewinn, und auf lange Sicht ist es besser, C ++ zu lernen, als C ++ zu ändern, um "mehr Sinn" für Sie zu machen.
Ich kann mir keinen guten Grund vorstellen, irgendeinen anderen Namen für string
zu verwenden, außer in einem Fall ähnlich den erweiterten Integer-Typen, wo Ihr Name vielleicht ein Typdef für string
auf einigen ist Builds und wstring
für andere.
Wenn Sie kein englischer Muttersprachler sind und versuchen, C ++ in eine andere Sprache zu übersetzen, dann sehe ich Ihren Standpunkt, aber ich denke nicht, dass das eine gute Idee ist. Sogar andere Sprecher Ihrer Sprache werden C ++ besser kennen, als sie die Übersetzungen kennen, die Sie zufällig ausgewählt haben. Aber ich bin ein englischer Muttersprachler, also weiß ich nicht wirklich, wie viel Unterschied es macht. Wenn man bedenkt, wie viele C ++ Programmierer es auf der Welt gibt, die Sprachen nicht übersetzen, dann ist das, glaube ich, keine große Sache, verglichen mit der Tatsache, dass die gesamte Dokumentation auf Englisch ist ...
Wenn jeder C ++ - Entwickler mit Ihren Aliasen vertraut war, warum nicht, aber Sie sind mit diesen Aliasen, die im Grunde eine neue Sprache für jeden einführen, der Ihren Code pflegen muss.
Warum fügen Sie diesen zusätzlichen mentalen Schritt hinzu, der in den meisten Fällen keine Klarheit bringt (& amp; & amp; und || sind ziemlich offensichtlich, was sie für jeden C / C ++ - Programmierer tun, und in C ++ können Sie den and
und or
keywords)
Tags und Links c++