Nav*_*Nav 51 c++ syntax casting
我在一个程序中看到了"1/3.f",并想知道".f"是什么用的.所以尝试了我自己的程序:
#include<iostream>
using namespace std;
int main()
{
cout<<(float)1/3<<endl;
cout<<1/3.f<<endl;
cout<<1/3<<endl;
}
Run Code Online (Sandbox Code Playgroud)
.f是否像演员一样使用?在哪里我可以阅读更多关于这个有趣的语法?
wic*_*ich 44
如果没有.f数被解释为一个整数,因此1/3是(int)1/(int)3=> (int)0而不是所希望(float)0.333333.该.f告诉编译器解释的字面类型浮体的浮点数.还有其他这样的结构,例如0UL,这意味着a (unsigned long)0,而平原0将是a (int)0.
的.f实际上是两个元件,.这表明字面是浮点数,而不是一个整数,f它告诉编译器字面应型浮子,而不是用于浮点文字默认双类型的后缀.
免责声明; 上面解释中使用的"强制转换构造"不是实际的强制转换,而只是表示文字类型的一种方式.
如果你想知道关于文字和你可以在其中使用的后缀的所有内容,你可以阅读C++标准,(1997年草案,C++ 11草案,C++ 14草案,C++ 17草案)或者看一下体面的教科书,比如Stroustrup的The C++ Programming Language.
顺便说一下,在你的例子中(float)1/3,文字1并且3实际上是整数,但是1首先被你的强制转换强制转换为浮点数,然后随后将3隐式地转换为浮点数,因为它是浮点运算符的右手操作数.(运算符是浮点数,因为它的左操作数是浮点数.)
Naw*_*waz 19
默认情况下3.2被视为double; 所以为了强制编译器将其视为float,你需要f在最后编写.
看看这个有趣的演示:
float a = 3.2;
if ( a == 3.2 )
cout << "a is equal to 3.2"<<endl;
else
cout << "a is not equal to 3.2"<<endl;
float b = 3.2f;
if ( b == 3.2f )
cout << "b is equal to 3.2f"<<endl;
else
cout << "b is not equal to 3.2f"<<endl;
Run Code Online (Sandbox Code Playgroud)
输出:
a不等于3.2
b等于3.2f
请在ideone上进行实验:http://www.ideone.com/WS1az
试着改变变量的类型a从float到double,再次看到的结果!