Es gibt so etwas wie eine "Floating-Point-Förderung" von float
zu double
pro [conv.fpprom].
A prvalue vom Typ float
kann einen prvalue von double
Typ umgewandelt werden. Der Wert ist unverändert.
Diese Konvertierung wird Fließkomma-Förderung genannt.
Die Antworten auf die verknüpfte Frage sind korrekt. Diese Heraufstufung sollte nicht automatisch beim Hinzufügen von zwei float
s erfolgen, da die üblichen arithmetischen Konvertierungen keine Gleitkommaoperanden fördern.
Gleitpunkt Förderung ist auftreten, wenn ein float
als Operand zu einer Ellipse verläuft, wie in printf
.Deshalb druckt der Formatbezeichner %f
entweder float
oder double
: Wenn Sie eine float
übergeben, erhält die Funktion tatsächlich eine double
, das Ergebnis der Förderung.
Die Existenz der Förderung Gleitkomma- auch in Überladungsauflösung von Bedeutung ist, weil integral aktionen und Gleitkomma aktionen besser als integrale implizite Konvertierung Rang haben Konvertierungen, Gleitkomma- Konvertierungen und Floating-integral Umrechnungen.
Beispiel 1:
void f(double);
void f(long double);
f(0.0f);
Dies erfordert void f(double)
da die Förderung zu double
ist besser als die Umstellung auf long double
. Betrachten Sie im Gegensatz dazu dieses vielleicht überraschende Beispiel 2:
void f(long double);
void f(int);
f(0.0f);
Dies ist mehrdeutig. Die Umrechnung von float
zu long double
ist nicht besser als die Umrechnung von float
zu int
, da es sich bei beiden nicht um Promotionen handelt.
Beispiel 3:
struct S {
operator float();
operator int();
};
double d = S();
Dies erfordert operator float
und dann fördert den resultierenden float
Wert double
d
zu initialisieren.
Lesen Sie durch die Kommentare und Antworten, die Sie sehen, das Bjarne Buch ist ein Fehler. –
mögliches Duplikat von [Gleitkomma-Promotion: stroustrup vs Compiler - wer hat Recht?] (Http://stackoverflow.com/questions/17215484/floating-point-promotion-stroustrup-vs-compiler-who-is-right) –
@RichardHodges Ich habe die Kommentare gelesen. Selbst wenn dieser kleine Auszug aus dem Buch genommen wurde, sagt mir das nicht, ob die Fließkomma-Förderung aus der Sprache genommen wurde. Ich habe immer noch keine Ahnung, wann eine Floating Point-Promotion stattfinden kann. – Bryan