截断从double到float?

psr*_*esh 6 c++ floating-point

#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;
}
Run Code Online (Sandbox Code Playgroud)

目前我正在学习复杂的数组声明使用底漆C++和在这里我的代码,我得到警告说,Warning C4305 '=': truncation from 'double' to 'float' Array两个ptr[0]ptr[1]出于某种原因,但我没有看到任何地方双打但是当我修改代码来

ptr[0] = (float)0.54;
ptr[1] = (float)0.65;
Run Code Online (Sandbox Code Playgroud)

我似乎没有任何警告可以解释为什么?先感谢您!

fty*_*nse 10

立即值,或文字,例如3,3.14"Hello"具有类型C++.3.14is 的类型,double大于float并导致此警告."更大"是指它可以保存不适合float转换的值,此时语言可能会以意想不到的方式运行.

您可以使用后缀来指定所需的类型,3.14F将浮动.

类似地,对于整数,你3U有无符号和3L长期甚至组合的那些.C++ 11还具有用户定义的后缀.


hls*_*lon 6

从标准2.14.4开始,Floating literals

除非由后缀明确指定,否则浮动文字的类型为double。后缀fF指定浮动,后缀lL指定长一倍。

然后,除非后缀明确指定,否则浮动文字总是双精度的。强制转换为float也可以工作(请注意适合双精度数而不是float的数字),但是当您将Cast用作唯一选择时,则应使用强制转换(不是这种情况)。在您的代码中只需使用后缀(0.54f),就可以了。