c++ - ¿Por qué auto deduce esta variable como doble y no flotante?
floating-point literals (4)
Esta pregunta ya tiene una respuesta aquí:
- ¿Por qué el valor de coma flotante como 3.14 se considera doble por defecto en MSVC? 5 respuestas
- ¿Todas las carrozas son dobles? 3 respuestas
- ¿Cómo se trata un literal de coma flotante doble o flotante en Visual C ++? 2 respuestas
- ¿Por qué sizeof (13.33) es de 8 bytes? 5 respuestas
- ¿Cuál es el tipo del valor 1.0e + 1 4 respuestas
En el fragmento de abajo,
auto
deduce la variable al
double
, pero quiero
float
.
auto one = 3.5;
¿Siempre usa el
double
para literales con un punto decimal?
¿Cómo decide entre flotador y doble?
El tipo de literal de coma flotante en C ++ es automáticamente
double
menos que:
-
f
tiene sufijo, en cuyo caso el tipo del literal esfloat
-
L
tiene sufijo, en cuyo caso el tipo del literal eslong double
Entonces, si desea que su variable sea
float
, haga esto:
auto one = 3.5f;
En C ++ (y C), los literales flotantes se tratan como
double
por defecto a menos que se especifique
f or F or l or L
El estándar tiene lo siguiente:
2.14.4 El tipo de un literal flotante es doble a menos que se especifique explícitamente por un sufijo. Los sufijos f y F especifican flotante, los sufijos l y L especifican doble largo. Si el valor escalado no está en el rango de valores representables para su tipo, el programa está mal formado.
Por lo tanto,
auto one = 3.5;
siempre es
double
y si tiene intención de
float
, debe codificarse como
auto one = 3.5f;
Tipo de literal
3.5
es
double
.
Para
float
, use
3.5f
Puedes jugar con este fragmento para ver información de varios tipos.
3.5
es un
double
literal.
Por lo tanto,
auto
deduce correctamente su tipo como
double
.
Todavía puede usarlo para inicializar una variable
float
, pero la forma más correcta es usar un literal
float
como
3.5f
.
La
f
al final se llama sufijo.
Los sufijos para literales de coma flotante son:
- (sin sufijo) define doble
-
f
F
define flotante -
l
L
define doble largo
Además de los literales de coma flotante , también hay sufijos para literales integrales y literales definidos por el usuario .