#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;
}
我目前正在使用引物C ++学习复杂的数组声明,在我的代码中,由于某些原因,我收到Warning C4305 '=': truncation from 'double' to 'float' Array
和ptr[0]
ptr[1]
的警告但我不知道看到双打,但当我修改代码
ptr[0] = (float)0.54;
ptr[1] = (float)0.65;
我似乎没有任何警告可以解释为什么?提前谢谢!
答案 0 :(得分:9)
立即值或文字,例如3
,3.14
或"Hello"
在C ++中有类型。 3.14
的类型为double
,大于float
并导致此警告。 “更大”是指如果转换后它可以保存不适合float
的值,此时语言可能会以意外的方式运行。
您可以使用后缀来指定所需的类型,3.14F
将浮动。
同样,对于整数,对于无符号和3U
,您有3L
长整数,甚至是{{1}}的组合。 C ++ 11还具有用户定义的后缀。
答案 1 :(得分:5)
从标准2.14.4开始,Floating literals
:
浮点文字的类型是double,除非后缀明确指定。后缀
f
和F
指定了float,后缀l
和L
指定了long double。
然后,浮点文字总是加倍,除非由后缀明确指定。铸造浮动也可以起作用(小心适合双倍大小而不是漂浮物的数字),但是当你唯一的选择(不是这种情况)时你应该使用铸造。在您的代码中只需使用后缀(0.54f
),就可以了。