gpt4 book ai didi

c++ - 不,真的,浮点提升什么时候发生?

转载 作者:可可西里 更新时间:2023-11-01 16:28:06 27 4
gpt4 key购买 nike

从这个其他QUESTION他们谈论 Bjarne Stroustrup 是如何说的,就像比 int 窄的整数数据类型(例如 short)被提升为 intfloat 被提升为 double。但是,与int 窄的积分扩展不同,浮点提升 不会以相同的方式发生,而是发生在其他地方。

我知道如果你要计算 float + double float 会在二元运算符(+) 被应用。但是,根据 Learncpp.com,这不是浮点提升 .这是通常的算术转换

浮点提升何时真正发生?

最佳答案

float 有“ float 提升”之类的东西。至 double根据 [conv.fpprom]。

A prvalue of type float can be converted to a prvalue of type double. The value is unchanged.

This conversion is called floating point promotion.

链接问题的答案是正确的。添加两个 float 时不应自动出现此提升s 因为通常的算术转换不会提升浮点操作数。

传递 float确实发生浮点提升作为省略号的操作数,如 printf .这就是为什么 %f格式说明符打印 floatdouble : 如果你传递 float , 该函数实际上接收到一个 double , 提升的结果。

浮点提升的存在在重载决议中也很重要,因为整数提升和浮点提升比整数转换具有更好的隐式转换等级、浮点转换和浮点整数转换

示例 1:

void f(double);
void f(long double);
f(0.0f);

这调用了 void f(double)自晋升到double比转换成 long double 更好.相比之下,请考虑这个可能令人惊讶的示例 2:

void f(long double);
void f(int);
f(0.0f);

这是模棱两可的。来自 float 的转换至 long double不比从 float 的转换更好至 int因为它们都不是促销事件。

示例 3:

struct S {
operator float();
operator int();
};
double d = S();

这调用了 operator float然后提升结果 floatdouble初始化 d .

关于c++ - 不,真的,浮点提升什么时候发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30490592/

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