Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Der Operator "?"

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
14.07.2006, 08:57 Uhr
Rumak18



Hallo. Nachdem auch eine Google Sucher nach dem "?" Operator sich als "zu" langwirig erwies,wollte ich euch fragen, wofür diese Operator nun eigentlich steht.
--
WinXP Pro
Athlon 3200 64
Geforce 6600 GT
HDD320 GB
Visual Basic 6.0
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.07.2006, 09:25 Uhr
xXx
Devil


Das ist nicht viel anderes wie nen if...


C++:
bool bTest = false;
int nValue = bTest ? 0 : 1;


das selbe wie:

C++:
bool bTest = false;
int nValue = 0;

if (!bTest)
    nValue = 1;
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.07.2006, 09:45 Uhr
ao

(Operator)



Zitat von Rumak18:
Hallo. Nachdem auch eine Google Sucher nach dem "?" Operator sich als "zu" langwirig erwies, ...

... könntest du Google noch mit "bedingter ausdruck" bemühen, da kommen bessere Treffer.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.07.2006, 11:32 Uhr
Pablo
Supertux
(Operator)



Zitat von xXx:
Das ist nicht viel anderes wie nen if...


C++:
bool bTest = false;
int nValue = bTest ? 0 : 1;


das selbe wie:

C++:
bool bTest = false;
int nValue = 0;

if (!bTest)
    nValue = 1;



ich würde es so nicht erklären, sondern eher so:


Code:
<ausdruck1> ? <ausdruck2> : <ausdruck3>



ist äquivalent zu


Code:
if (<ausdruck1>)
  <ausdruck2>
else
  <ausdruck3>




--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.07.2006, 12:02 Uhr
Rumak18



Vielen Dank. Beide Erklärung finde ich gut,wobei sich die zweite leichter in mein Gedächtnis einprägt.
--
WinXP Pro
Athlon 3200 64
Geforce 6600 GT
HDD320 GB
Visual Basic 6.0
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.07.2006, 12:42 Uhr
virtual
Sexiest Bit alive
(Operator)


Die analogie mit dem if stimmt natürlich, aber zwei Dinge sind zu beachten:

1. Der ? Operator verhält sich in C und C++ unterschiedlich.

2. Der ? Operator hat einen Rückgabewert, if bekanntlich nicht.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.07.2006, 16:02 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)



Zitat von virtual:
1. Der ? Operator verhält sich in C und C++ unterschiedlich.

Hmm, das ist mir neu. Wie unterschiedlich, wenn man fragen darf ?
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
14.07.2006, 18:49 Uhr
virtual
Sexiest Bit alive
(Operator)


zB ist

C++:
        int i;
        char* s;
...          
        i%2? s="ungrade":s="grade";


Legales C++ nach ISO Standard 98, wogegen es illegal nach C99 Standard ist. (s="grade" ist eine Zuweisung, welche gemäß C99 nicht da erlaubt ist.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.07.2006, 19:58 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Ich kann mir zwar nicht erklären wieso aber danke für den Hinweis, man lernt nie aus ...
Wobei ich es ja so machen würde:

C++:
s = i % 2 ? "ungrade" : "grade";
aber das sei mal einfach so dahin gestellt ...
--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.07.2006, 22:01 Uhr
virtual
Sexiest Bit alive
(Operator)


Naja,
also sicherlich ist die von mir dargestellte Variante nicht die häufig genutzte Variante, sie kommt eher bei tendenziell kryptischen Sourcen vor, etwa:

C++:
x = y==1? a=tu_dies():b=tu_das();


Solch Code wird gerne von Leuten wie Helmut Schellong verbrochen, (Du kennst ihn, wenn Du schon länger die dclc Newsgroup lesen solltest).

Was mich daran ärgert ist, daß der Ausdruck in C89 noch durchaus legal war; ich weiß nicht ob die Leute im Standardisierungskommiteen einfach Profilneurosen haben ("Wir-wollen-aber eine-einzigartige-Sprache-die-nix-mitC++-zu-tun-hat"), schlicht verkopfte Volltrottel sind oder einfach lediglich losgelöst von jeder Praxis in ihren Lehramtsstübchen zuviel Joints rauchen.

Diese Sache mit dem ? Opertor ist ein von vielen Beispielen, bei denen ich glaube, daß dem Programmierer das Leben schwerer gemacht wird, ohne daß diese bewusste (?) Incompatibiltät einen sittlichen Nährwert hätte.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: