静态强制转换内的表达式

1 c++ casting integer-arithmetic

我写了这样的代码:

#include<iostream>
using namespace std;

int main()
{
    cout<<static_cast<float>(5/9)*9;
    cout<<static_cast<float>(5)/9*9;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

预期产量:55

原始输出:05

为什么第一个静态转换语句变成 0 ?

Vla*_*cow 5

在这个子表达式中

(5/9)
Run Code Online (Sandbox Code Playgroud)

本声明的

cout<<static_cast<float>(5/9)*9;
Run Code Online (Sandbox Code Playgroud)

这里使用了整数运算。子表达式的结果是 0。该结果被转换为 float 类型。

static_cast<float>( 0 )
Run Code Online (Sandbox Code Playgroud)

也就是说,在求值之后,将强制转换应用于括号中的主要子表达式。

在第二个声明中

cout<<static_cast<float>(5)/9*9;
Run Code Online (Sandbox Code Playgroud)

这实际上相当于

cout<< 5.0f/9*9;
Run Code Online (Sandbox Code Playgroud)

在子表达式中

static_cast<float>(5)/9
Run Code Online (Sandbox Code Playgroud)

或者是一样的

5.0f / 9 
Run Code Online (Sandbox Code Playgroud)

使用浮点数运算,结果不等于0。