Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

21

22.07.2010, 21:09

Was meinst du damit? - Es ist ganz klar ein Operator.
Und eine Wertzuweisung muss nicht statt finden. Das Ergebnis der Operation hat einfach einen Wert, den er annehmen kann (es ergib einen Ausdruck).

Dass man ihn nicht überladen kann ist einfach eine Ausnahme, wie auch bei '.', '.*' und '::'.
Wie du meinst. Ich persönlich sehe ihn als ein logisches Konstrukt der Syntax für Control-Flow, wie if, while, break & co. Nur hat dieses Konstrukt eben die optische Form eines Operators.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

22

22.07.2010, 21:48

Das hat nichts mit meiner Meinung zu tun und das hat nicht nur die optische Form eines Operators, sondern er ist einer. Das ist erstens so definiert und zweitens auch sinnvoll so, wenn du mal darüber nachdenkst.

Ich sehe da nicht wirklich eine Verbindung zu einer Anweisung. Es ist ganz klar ein Ausdruck, oder sind für dich if, while usw. Ausdrücke, welche du einer Variable zuweisen kannst? - Wohl kaum..

Und wirklich für Control-Flow ist er auch nicht zu Gebrauchen, da du da keine Blöcke reinpacken kannst, sondern lediglich zwischen 2 Ausdrücken unterscheiden kannst (man kann antürlich mit dem Komma Operator was basteln, aber naja).

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

23

22.07.2010, 21:55

Wie du meinst, mir soll es egal sein. Ich muss das wirklich nicht weiter diskutieren, schon gar nicht um einen Supermoderator am Ende noch zu verärgern. Das Topic ist ohnehin schon lange beantwortet.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

24

22.07.2010, 22:04

Letztendlich ist es eine Sache, wie der Standard es Definiert und der Compiler es implementiert und eine andere, wie der Programmierer es verstanden hat. Meist ist es sinnvoll zu wissen, wie es eigentlich gemeint ist, weil man dann in manchen Situationen bestimmte Dinge direkt weiß, aber zum Anwenden reicht oft auch der grobe Überblick.
Das Problem ist, wenn es der Standard auf eine Art und weiße definiert, muss man darüber nicht diskutieren^^
Lieber dumm fragen, als dumm bleiben!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

25

22.07.2010, 22:05

Zitat

(man kann antürlich mit dem Komma Operator was basteln, aber naja).

stimmt hier fällt mir auf, dass es doch nicht ganz wie mein template funktioniert.
bei dem aufruf des templates werden, anders als beim bedingten ausdruck, beide ausdrücke aufgerufen und nur der passende wert zurückgeben.
der unterschied:

C-/C++-Quelltext

1
2
(bedingung)? ++x : ++y; // nur eins wird inkrementiert
bedingterAusdruck(bedinung, ++x, ++y); // beide werden inkrementiert

sry für das posten des fehlers >.<
zum glück denk ich beim programmieren eher daran als beim posten im forum^^
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

26

22.07.2010, 22:27

Wie du meinst, mir soll es egal sein. Ich muss das wirklich nicht weiter diskutieren, schon gar nicht um einen Supermoderator am Ende noch zu verärgern. Das Topic ist ohnehin schon lange beantwortet.

Och. Mich verärgert hier niemand so schnell. ;) (gibts denn irgendwo Anzeichen, dass ich verärgert bin?! 8| )

Du stellst das ganze einfach so dar, als ob es meine Erfindung wäre, was es definitiv nicht ist. Und bevor du mit merkwürdigen Konstrukten, wie "bedingte Wertzuweisung" Leute verwirrst möchte ich die Sache eben gerne klarstellen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

27

22.07.2010, 22:35

Nun, es gab ja schon die Feststellung, dass eine Operation (durch einen Operator) und eine Funktion äquivalent sind. Beide erfordern die Auswertung der Eingabe-Werte vor der Ausführung der Operation. Das ist beim ternären Operator, welcher 3 Eingabe-Werte besitzt, aber nicht der Fall, denn er wertet nur 2 der 3 aus. Er besitzt daher eine Control-Flow-Eigenschaft, die nicht äquivalent zu einer Operation/Funktion ist. Sehe ich das richtig? Nur so zur Klarstellung...
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Crush

Alter Hase

Beiträge: 383

Wohnort: Stuttgart

Beruf: Softwareentwickler

  • Private Nachricht senden

28

22.07.2010, 23:13

Was ist eine Control-Flow Eigenschaft? Nie gehört.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

29

22.07.2010, 23:18

Äquivalenz würde ich nicht unterschreiben, aber eine sehr nahe Verwandschaft (zumindest in C++), ja.

Du bringst da, denke ich einiges durcheinander. C++ kennt kein control flow.

Nur weil etwas 2 von 3 Argumenten auswertet heisst das nicht, dass es ein statement ist. Ansonsten wäre das hier ja auch eins:

C-/C++-Quelltext

1
int max (int n1, int n2) {/*...*/}


Der wichtige Unterschied von Anweisungen (statements; if, switch usw.) und Ausdrücken (expressions; ?: , + usw. ) ist, dass eine Anweisung keinen Wert hat und wo auch nichts berechnet wird. Ausdrücke haben Werte und stellen eine Art Berechnung dar.

Um mal ein paar Beispiele zu machen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
int n; // deklaration statement
n = 2+2; // 2+2 ist eine expression generiert durch den + Operator, aber
              // das ganze ist ein expression statement, also ein Ausdruck wo der Wert der Berechnung 
              // weggeworfen wird

if ( n == 2 ){/**/} // if statement mit der expression (n==2) 
                 // merke das if hat keinen Wert und berechnet auch nichts

int m = n==2 ? 5:1; // ?: expression evaluiert hier zu 1 und steht für eine Berechnung da


Ich hoffe es ist klar geworden.

Und um das noch klarzustellen: Es geht lange nicht mehr darum den ?: Operator zu verstehen, sondern um die Definition was es ist und was es eben nicht ist. Um sich das verhalten klarzumachen ist die if/else Sache sicher geeignet und ich mache das eigentlich auch so, aber es ist wichtig die Begriffe und und Unterschiede zu kennen.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

30

23.07.2010, 08:14

C++ kennt keinen Control Flow? Ähm... Es mag ja gestern spät gewesen sein, aber Du weißt schon, dass z.B. If, For, Do, While, Goto, Break, Return, Continue, Switch in die Klasse der Control Flow Statements gehören?
Der ganze Teil bezüglich regulärer Sprachen und Ausdrücke hat damit gar nichts zu tun, wenn man sich auf deren Funktionsweise bezieht, wie ich es eben tue.

Ein If berechnet also nichts und wertet wohl auch beide Parameter nicht aus? Das ist ja spannend. Ich dachte immer es wertet einen Boolean zur Bestimmung des Control Flows aus. Und meist ist dieser Boolean berechnet durch einen Compare Operator (spätestens in asm durch einen conditional jump findet somit eine Berechnung statt).
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige