为什么将float类型自动转换为double类型,而没有其他操作

时间:2018-07-16 13:08:01

标签: c++ double

我使用Visual Studio2017。C++。当我尝试编译此代码时,发生转换错误。我想知道为什么将“重”变量转换为双精度变量吗?

#include "stdafx.h"
#include <iostream>
#include <cstring>

struct CandyBar
{
char band[20];
float heavy;
int kaluli;
};
using namespace std;
int main()
{

CandyBar *snack = new CandyBar[3];
snack[0] = {"snack A", 2.3, 350 };
snack[1] = {"snack B", 3.3f, 450 };
snack[2] = {"snack C", 4.3f, 550 };
int i = 0;
while (i < 3)
{
    cout << "band is " << snack[i].band << endl;
    cout << "heavy is " << snack[i].heavy << endl;
    cout << "kaluli is " << snack[i].kaluli << endl;
    cout << "=====================================" << endl;
    i++;
}
delete[] snack;

return 0;
}

因为我使用的是中文版视觉工作室,所以错误显示为中文,抱歉,未显示全部错误消息。 enter image description here

1 个答案:

答案 0 :(得分:2)

使用显示的代码,您通常会收到以下警告:

warning C4838: conversion from 'double' to 'float' requires a narrowing conversion

这是因为2.3是文字,被解释为double。如果您希望将2.3指定为浮点数,则可以显式并编写2.3f,这样就不会缩小转换范围。


format包含一个可选的后缀。

后缀(如果存在)是fFlL中的一个。后缀确定浮点文字的类型:

  • (无后缀)定义双精度
  • f F定义浮点数
  • l L定义了long double