gpt4 book ai didi

c++ - 这是为 float / double 通用化函数的正确方法吗

转载 作者:太空狗 更新时间:2023-10-29 23:35:05 24 4
gpt4 key购买 nike

在我的函数中:

template <typename T>
T lerpMidway(const T& a, const T& b)
{
T result;
result = (b - a) * 0.5 + a;
return result;
}

int main()
{
lerpMidway(4.f, 6.f);
}

如果我将浮点值传递给此函数,我认为 0.5 会将所有其他 float 提升为 double 值,然后在需要返回时将其转换回 float 。

我试过这条线:

result = (b - a) * decltype(a)(0.5) + a;

它摆脱了编译器消息说 double to float possible loss of data,但是这里如果“a”是一个 float,我用一个 double 初始化它,没有转换发生吗?我也可以用 0.5f 初始化它,这不会有什么不同吗?

最佳答案

在 C++ 中,0.5类型为 double , 和 0.5f类型为 float .无法指定作为模板参数的类型的文字。在这种情况下,转换是可以接受的。

我推荐static_cast而不是功能性的风格转换。 decltype是不必要的,有问题的类型已经有一个名称,T .

因此,static_cast<T>(0.5)完全没问题。

从纯抽象的角度来看,有一个从double的转换至 float (或任何 T 表示的类型)。实际上,这种转换是空操作。从编译器的角度来看,这是常量折叠的简单情况。

关于c++ - 这是为 float / double 通用化函数的正确方法吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48057479/

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