c++ - ¿Por qué auto deduce esta variable como doble y no flotante?




floating-point literals (3)

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:

  1. f tiene sufijo, en cuyo caso el tipo del literal es float

  2. L tiene sufijo, en cuyo caso el tipo del literal es long 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;

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 .





type-deduction