Was ist der Typ von "auto var = {condition}? 1: 1.0 "in C ++ 11? Ist es doppelt oder int?

8

In C ++ 11 was sind die Typen von x und y wenn ich das schreibe?

%Vor%     
wefwefa3 05.03.2015, 19:36
quelle

2 Antworten

9

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 :

zu testen %Vor%

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.

    
tux3 05.03.2015, 19:44
quelle
5

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.)

%Vor%

Also wird der andere Operand ebenfalls in double konvertiert und das Ergebnis von Ausdrücken hat double.

    
Vlad from Moscow 05.03.2015 20:05
quelle