C++ 从double到float的截断?

C++ 从double到float的截断?,c++,floating-point,C++,Floating Point,我似乎没有警告,有人能解释为什么吗?提前谢谢你>P值>即时值,或文字,如 3 < /> >代码> 3.14 < /> >或“hello”有C++类型。3.14的类型为double,大于float,并导致此警告。我所说的“更大”是指,如果转换,它可以保存不适合float的值,在这一点上,语言可能会以意外的方式运行 您可以使用后缀指定所需的类型,3.14F将是浮点型 类似地,对于整数,对于无符号整数有3U,对于长整数和偶数整数的组合有3L。C++11还具有用户定义的后缀。来自标准2.14.4,浮动文

我似乎没有警告,有人能解释为什么吗?提前谢谢你

>P值>即时值,或文字,如<代码> 3 < /> >代码> 3.14 < /> >或<代码>“hello”<代码>有C++类型。
3.14
的类型为
double
,大于
float
,并导致此警告。我所说的“更大”是指,如果转换,它可以保存不适合
float
的值,在这一点上,语言可能会以意外的方式运行

您可以使用后缀指定所需的类型,
3.14F
将是浮点型


类似地,对于整数,对于无符号整数有
3U
,对于长整数和偶数整数的组合有
3L
。C++11还具有用户定义的后缀。

来自标准2.14.4,
浮动文本

除非由后缀显式指定,否则浮点文本的类型为double。后缀
f
f
指定浮点,后缀
l
l
指定长双精度


然后,除非由后缀显式指定,否则浮点文本总是双精度的。铸造到浮球也可能会起作用(注意适合double大小而不是浮球大小的数字),但当铸造是您唯一的选择时,您应该使用铸造(不是这种情况)。在您的代码中,只需使用后缀(
0.54f
),就可以了。

0.54
将被视为双精度类型如果您使用了
0.54f
,那么它将是一个浮点型。请不要使用小写字母作为后缀(
l
);对于
1
,它很容易被误读。改用
L
;它的意思是相同的,并且明确地不是
l
1
。因为
L
需要大写,我建议其他后缀也使用大写。这取决于字体,但我大体上同意。
#include <iostream>

using namespace std;

int main(void)
{
    float haha[2];
    float (&ptr)[2] = haha;
    ptr[0] = 0.54;
    ptr[1] = 0.65;

    cout << haha[0] << '\n' << haha[1];
    system("pause");
    return 0;
}
ptr[0] = (float)0.54;
ptr[1] = (float)0.65;