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.14
is 的类型,double
大于float
并导致此警告."更大"是指它可以保存不适合float
转换的值,此时语言可能会以意想不到的方式运行.
您可以使用后缀来指定所需的类型,3.14F
将浮动.
类似地,对于整数,你3U
有无符号和3L
长期甚至组合的那些.C++ 11还具有用户定义的后缀.
从标准2.14.4开始,Floating literals
:
除非由后缀明确指定,否则浮动文字的类型为double。后缀
f
和F
指定浮动,后缀l
和L
指定长一倍。
然后,除非后缀明确指定,否则浮动文字总是双精度的。强制转换为float也可以工作(请注意适合双精度数而不是float的数字),但是当您将Cast用作唯一选择时,则应使用强制转换(不是这种情况)。在您的代码中只需使用后缀(0.54f
),就可以了。