附加到数字的".f"的目的是什么?

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是否像演员一样使用?在哪里我可以阅读更多关于这个有趣的语法?

peo*_*oro 57

3.相当于3.0,它是一个双倍.

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

试着改变变量的类型afloatdouble,再次看到的结果!


jco*_*der 8

3.f是3.0f的缩写 - 3.0作为float类型的浮点文字.