gpt4 book ai didi

c++ - 整数除法的哪个操作数是 static_casted 以获得 float 结果是否重要?

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:56 24 4
gpt4 key购买 nike

将两个相除得到 float int s,我们static_cast float 的操作数之一,像这样:

int a = 2;
int b = 3;
float c = static_cast<float>(a) / b; // c = 0.666666
float d = a / static_cast<float>(b); // d = 0.666666

在上面的例子中,哪个操作数是 static_cast 并不重要编辑。但是,假设其中一个操作数是编译时常量,而另一个不是,如下所示:

int a = foo();  // value not available at compile-time.
const int b = SOME_CONSTANT; // compile-time constant.

编译器优化对两者有什么影响吗static_cast s,如下所述?

float c = static_cast<float>(a) / b;

在这种情况下,编译器可以替换b及其值(value),但由于a未知,转换只能在运行时发生。

float d = a / static_cast<float>(b);

但是,在这种情况下,编译器知道 b , 所以它可以在编译时进行转换,并替换 b直接与 float值(value)。

在这两种情况下,在转换之后,在运行时都会发生整数/ float (或 float /整数)除法。

这种直觉是否正确,或者编译器是否足够聪明,可以在两种情况下同样优化?还有其他我忽略的因素吗?

最佳答案

运行时不会发生int/floatfloat/int 划分。曾经。

由于一个操作数正在转换(显式转换)为 float,因此另一个操作数将隐式转换为 float 以进行除法。

你的两种情况都等同于

static_cast<float>(a) / static_cast<float>(b);

关于c++ - 整数除法的哪个操作数是 static_casted 以获得 float 结果是否重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30116970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com