Der Typ wird double
sein, weil es der allgemeine Typ der Literale% co_de ist % und 1
.
Es gibt eine einfache Möglichkeit, das mit 1.0
:
Dies gibt typeid
für meine Version von GCC aus.
Das Ausführen von d
sagt uns dann, dass echo d | c++filt -t
wie erwartet dem Typ d
entspricht.
Gemäß der Beschreibung des Bedingungsoperators im C ++ Standard (Bedingter Operator 5.16)
6 Lvalue-to-rvalue (4.1), Array-to-Pointer (4.2) und function-to-pointer (4.3) Standardkonvertierungen werden am. durchgeführt zweite und dritte Operanden. Nach diesen Conversions, einer der folgendes soll halten:
- Der zweite und der dritte Operand haben einen Arithmetik- oder Aufzählungstyp; Die üblichen arithmetischen Konvertierungen werden durchgeführt , um sie auf einen gemeinsamen Typ zu bringen, und das Ergebnis ist von diesem Typ.
Und (5 Ausdrücke)
10 Viele binäre Operatoren, die Operanden der Arithmetik oder erwarten Aufzählungstyp verursacht Konvertierungen und Ergebnistypen ähnlich Weg. Der Zweck ist es, einen gemeinsamen Typ zu ergeben, der auch die Art von ist das Ergebnis. Dieses Muster wird als übliche arithmetische Konvertierung bezeichnet. die wie folgt definiert sind:
- Andernfalls, wenn einer der Operanden doppelt ist, soll der andere konvertiert werden verdoppeln.
In beiden Verwendungen des Bedingungsoperators ist einer der Operanden floating literal mit dem Typ double - 1.0
(der C ++ - Standard: Der Typ eines Floating - Literals ist double , sofern nicht ausdrücklich angegeben ein Suffix.)
Also wird der andere Operand ebenfalls in double konvertiert und das Ergebnis von Ausdrücken hat double.
Tags und Links c++ c++11 types auto ternary-operator