Zeb*_*ish 2 c++ generics templates
在我的功能:
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);
}
Run Code Online (Sandbox Code Playgroud)
如果我将浮点值传递给此函数,我认为0.5会将所有其他浮点数提升为双精度数,然后在返回时将其转换回浮点数.
我试过这条线:
result = (b - a) * decltype(a)(0.5) + a;
Run Code Online (Sandbox Code Playgroud)
它摆脱了编译器消息说双重浮动可能丢失的数据,但是如果"a"是浮点数,并且我用双精度初始化它,那么没有转换发生?我也可以用0.5f初始化它并没有什么区别?
在C++中,0.5
有类型double
,并且0.5f
有类型float
.无法指定作为模板参数的类型的文字.在这种情况下,演员是可以接受的.
我建议static_cast
而不是功能样式.decltype
是不必要的,有问题的类型已经有了名字,T
.
因此,static_cast<T>(0.5)
完全可以.
从纯粹抽象的角度来看,有一种转换double
为float
(或任何类型T
表示).实际上,这种转换是无操作的.从编译器的角度来看,这是一个简单的常量折叠情况.