C/C++:Was Beduetet x?y:z

MPNuts

Mitglied
Hallo,

ich habe einige Seiten durchstöbert, und bin dabei auf folgendes gestossen:
x?y:z;
Was bedeutet das genau?
Könnte ich auch schreiben:
Code:
if (x) y; else z;
Wenn das das Gleiche ist, warum gibt es es? Nur wegen fauler Programierer, oder um den Code möglichst kryptisch darstellen zu können?

Wäre nett, wenn mich jemand aufklären könnte.
 
Ich geb dir mal ein einfaches Beispiel:

z=(a>b)? a:b;

Sollte a größer als b sein, so wird z der Wert von a zugewiesen.
Ansonsten wird z der Wert von b zugewiesen (also, wenn b größer oder gleich a ist)
äquivalent:

PHP:
if(a>b)
{
w=a;
}
else
{
w=b;
}
 
Nur wegen fauler Programierer, oder um den Code möglichst kryptisch darstellen zu können?
Ja, das kann man eigentlich so sagen. Ist nämlich wirklich nicht gerade feiner Code, und eben: Leserlicher wird er dadurch bestimmt auch nicht. Also lass es lieber. ;)
 
Danke, so macht das Sinn!

Könnte das aber auch so interpretieren e=x?a:b;
Wenn Argument x zutrifft, führe Argument a aus, und speicher das Ergebnis in e(damit meine ich, ich könnte damit auch verschiedene Funktionen oder andere Ding tun, und nicht nur einfach zuweisung?), wenn nicht dann b.
Und wenn das geht, mit was fasse ich einen Block zusammen? -Mit {} ?
 
SilentWarrior hat gesagt.:
Ja, das kann man eigentlich so sagen. Ist nämlich wirklich nicht gerade feiner Code, und eben: Leserlicher wird er dadurch bestimmt auch nicht. Also lass es lieber. ;)
Gut, werde ich mir merken, aber um meinen Prof zu ärgern ist das nicht schlecht!
 
Kann aber ewig schneller, als if-else sein (je nach Compiler und Datentyp)....
Haste dir mal den dazu generierten Assemblercode angeguckt...
Das hat mich auch ma interessiert, weil ich gedacht hab, das kann ja nur gleich umgesetzt werden, wie if-else....
aber weit gefehlt, sah total anders aus.... totale Überraschung..

Mfg
 
Zuletzt bearbeitet:
Naja, in Assembler bin ich nicht gerade zuhause! Hatte es mal kurz in der Schule, habe mich dann aber nie wieder damit beschäftigt.
 
MPNuts hat gesagt.:
Könnte das aber auch so interpretieren e=x?a:b;
Wenn Argument x zutrifft, führe Argument a aus, und speicher das Ergebnis in e(damit meine ich, ich könnte damit auch verschiedene Funktionen oder andere Ding tun, und nicht nur einfach zuweisung?), wenn nicht dann b.
Und wenn das geht, mit was fasse ich einen Block zusammen? -Mit {} ?

Hä?
Erklär mal genauer und geb dazu am Besten ein Beispiel.

übrigens, ich finde es durchaus in vielen Fällen leserlicher, ein a?b:c als if-else zu verwenden, das zieht auch den code nicht so unnötig in die Länge...
Also wo es Sinn macht (zb bei einer Zuweisung), würde ich nicht zu sparsam damit sein..
 
Ja das geht, zu sehen an Folgendem Codestück

PHP:
#include <iostream>

using namespace std;


int eins()
{
	return 1;
}
int zwei()
{
	return 2;
}
int main()
{
	int x,y;
	cin>>x;
	y=x?eins():zwei();
	if (y==1){
		cout<<"x ist ungleich null(true)";}
	if(y==2){
		cout<<"x ist gleich null(false)";}
	return 0;

}

Wobei man wissen muss ,dass if(x) immer TRUE ergibt ,wenn x ungleich 0 ist.
 
SilentWarrior hat gesagt.:
Ja, das kann man eigentlich so sagen. Ist nämlich wirklich nicht gerade feiner Code, und eben: Leserlicher wird er dadurch bestimmt auch nicht. Also lass es lieber. ;)

Seh ich anders. Sobald mann sich daran gewöhnt hat ist dieser Code kurz knackig und sehr gut lesbar :)

ich favorisieren ihn mittlerweile.
 

Neue Beiträge

Zurück