我使用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;
}
答案 0 :(得分:2)
使用显示的代码,您通常会收到以下警告:
warning C4838: conversion from 'double' to 'float' requires a narrowing conversion
这是因为2.3
是文字,被解释为double
。如果您希望将2.3
指定为浮点数,则可以显式并编写2.3f
,这样就不会缩小转换范围。
format包含一个可选的后缀。
后缀(如果存在)是f
,F
,l
或L
中的一个。后缀确定浮点文字的类型:
f
F
定义浮点数l
L
定义了long double