Article View: de.comp.lang.c++
Article #966Re: Typ eines ?: Ausdruck?
From: Uwe Tantz
Date: Wed, 06 Dec 1995 20:23
Date: Wed, 06 Dec 1995 20:23
47 lines
2648 bytes
2648 bytes
On 6 Dec 1995, Ullrich von Bassewitz wrote: > Und gleich nochmal eine Frage: > > Welchen Typ hat das Ergebnis eines ?: Ausdrucks? > > Grund fuer meine Frage ist wiederum ein Verhalten der neuen Version von gcc. > Und zwar wird ploetzlich ein Konstrukt wie > > Window* W = (A == B)? LastWindow : NULL; > > mit einer Warnung kommentiert: > "ANSI C++ forbids implicit conversion from `void*' in initialization" > > Was g++ da macht ist so ungefaehr klar: Der ?: Ausdruck wird ausgewertet, > das Ergebnis ist aber kein Window* (so wie frueher und bei allen anderen > Compilern die ich kenne), sondern es wird "void*" als kleinster gemeinsamer > Nenner gewaehlt, woraufhin die Zuweisung fehlschlaegt. > > Ist das tatsaechlich nach dem neuen Standard richtig? > > Wenn ich den ?: Ausdruck als andere Schreibweise fuer ein if ansehe, dann > ist es nicht richtig (if Ausdruecke werden von g++ auch korrekt gehandhabt), > andererseits hat ein if Statement auch keinen Ergebnistyp... > > Gruss > > Ich weiss zwar nicht, was der Standard zu diesem Thema sagt, ich habe aber beim (nicht mehr ganz) aktuellen Microsoft Visual C++ 2.2 das gleiche Problem: Der Typ des ?:-operators muss sowohl mit dem zweiten, als auch mit dem dritten Argument vertraeglich sein, also exakt das gleiche Verhalten wie beim gnu. Ich hab mir dann damit beholfen den NULL Pointer auf den passenden Typ zu casten (auf Window* in deinem Bsp.). Soweit ich's ueberblicke, macht das aber nur im Zusammenhang mit dem NULL-Pointer Probleme, weil bei der Zuweisung von NULL die Typsicherheit gewissermassen aufgehoben ist (NULL ist ja als #define NULL 0L implementiert). Tschuess Uwe +---------------------+-------------------------------------------+ | Uwe-Krischna Tantz | Tel: 0941 / 56 31 40 | | Blaue-Stern-Gasse 7a| EMail: uwe.tantz@physik.uni-regensburg.de | | 93047 Regensburg | | +---------------------+-------------------------------------------+
Technical Details
Message-ID:
<Pine.SOL.3.90.951206211258.17953B-100000@rphc6.physik.uni-regensburg.de>Path:
arc1-ca.pugleaf.net!uni-regensburg.de!newsReferences:
<RCD7B0RH@wuschel.ibb.schwaben.com>Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!uni-regensburg.de!news From: Uwe Tantz <c4037@rphc1.physik.uni-regensburg.de> Newsgroups: de.comp.lang.c++ Subject: Re: Typ eines ?: Ausdruck? Date: Wed, 6 Dec 1995 21:23:08 +0100 (MET) Organization: University of Regensburg, Germany Message-ID: <Pine.SOL.3.90.951206211258.17953B-100000@rphc6.physik.uni-regensburg.de> References: <RCD7B0RH@wuschel.ibb.schwaben.com> NNTP-Posting-Host: rphc6.physik.uni-regensburg.de Mime-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Sender: c4037@rphc6.physik.uni-regensburg.de In-Reply-To: <RCD7B0RH@wuschel.ibb.schwaben.com>