Ist das C++ Standard oder Assembler?
-
Hallo,
beim Durcharbeiten von C++ ist mir folgendes Codefragment aufgetaucht:
return((a>b)?a:b);Warum hat man sich so etwas ausgedacht?

-
Das ist C++ Standard; ein if in einer Anweisung.
Aber wenn du das kryptisch findest, kennst du wohl noch nicht viel C++.audacia schrieb:
Marc++us schrieb:
Wir hörten auf, als es uns gelang, den Ausdruck
for(;P("\n"),R--;P("|"))for(e=C;e--;P("_"+(*u++/8)%2))P("| "+(*u/4)%2);fehlerfrei zu compilieren.
Die C++0x-Version davon lautet übrigens
int main () { ([&](){}.*((int(decltype([&](){})::*)())0))(); }
-
Danke, unglaublich ...
-
Wo siehst du hier Assembler?
-
Mechanics schrieb:
Wo siehst du hier Assembler?
Ja, die Frage müsste eigentlich lauten: Ist das C++ oder Lisp?
-
Cpp_Anfaeger schrieb:
return((a>b)?a:b);Warum hat man sich so etwas ausgedacht?

Ist eigentlich recht praktisch, sofern man es nicht übertreibt. Wobei ein paar Spaces angenehm sind und weniger Klammern auch nicht schaden.
-
WennichdieLeerzeichenausmeinenKommentarenlasse,wirdesauchziemlichunleserlich...
-
nebierhcssträwkcürhconseudtsetssümuzadön

-
([&](){}.*( (/*..*/)0 ))();Das erzeugt undefiniertes Verhalten.
Edit: Aber es kompiliert sowieso nicht.
-
Kompilieren tut hingegen
int main () { auto closure_obj = [&](){}; (closure_obj.*((int(decltype(closure_obj)::*)())0))(); }, da hier nicht zwei verschiedene Lambda-Ausdrücke verwendet werden (die natürlich zu zwei verschiedenen closure-Typen führten). UB nach wie vor.
-
Mechanics schrieb:
Wo siehst du hier Assembler?
Alles, was man nicht flüssig lesen kann, ist für mich Assembler

-
Cpp_Anfaeger schrieb:
Alles, was man nicht flüssig lesen kann, ist für mich Assembler

Hizkuntzak jarrera bitxi bat duzu
-
Zahar suediarrak! Hab's erstmal mit Cäsar-Cipher probiert, darauf dass das echt ein Text in einer existierenden Sprache sein könnte hat mich erst Google gebracht.
-
SeppJ schrieb:
Cpp_Anfaeger schrieb:
Alles, was man nicht flüssig lesen kann, ist für mich Assembler

Hizkuntzak jarrera bitxi bat duzu
So seltsam ist meine Einstellung zu Sprachen doch nicht

-
Cpp_Anfaeger schrieb:
Warum hat man sich so etwas ausgedacht?

Übrigens... Bist du nicht der, der vorher angeblich jahrelang PHP programmiert hat? Wenn mich nicht alles täuscht, hat PHP auch das ?: Konstrukt.
-
Mechanics,
ich denke der Unterschied ist, das man soetwas in PHP Code selten findet. Außnahmen sind zum Beispiel ausgereifte Content Management Systeme.
- Wenn ich mir da die einschlägigen Foren zu anschaue, werden dort ja sogar von vielen alt eingesessenen so Anfängerkonstrukte wie (a == true) verwendet ohne zu hinterfragen ob dieses == true notwendig ist.
-
inflames2k schrieb:
so Anfängerkonstrukte wie (a == true) verwendet ohne zu hinterfragen ob dieses == true notwendig ist.
Wo du das grad ansprichst
Das wird auch bei uns in der Arbeit von einigen in C++ verwendet und nervt mich immer. Immer dieses == false und == true. == false kann ich noch halbwegs verstehen, vielleicht findet das jemand lesbarer als !, aber == true finde ich schon ziemlich ekelhaft.
-
Mechanics schrieb:
Cpp_Anfaeger schrieb:
Warum hat man sich so etwas ausgedacht?

Übrigens... Bist du nicht der, der vorher angeblich jahrelang PHP programmiert hat? Wenn mich nicht alles täuscht, hat PHP auch das ?: Konstrukt.
??? ... ich kann kein PHP, nicht mal ein bisschen

-
Assembler ist wesentlich einfacher zu lesen und zu verstehen als C++, nur leider CPU-Abhängig.
-
C++ ist schon mit Abstand die schwerste Sprache, die man seinem Projekt, und die Leuten die dann auf Jahre damit arbeiteten müssen, antun kann. Daher wird auch nur noch C++ eingesetzt wenn es wirklich gar nicht anders geht.
"Wenn man C++ meiden kann, dann tut man dies auch"