gpt4 book ai didi

c++ - 如何避免在模板函数中使用浮点文字缩小转换

转载 作者:太空狗 更新时间:2023-10-29 21:12:35 25 4
gpt4 key购买 nike

您通常如何处理模板函数中的浮点文字?

假设我们有如下代码:

template <typename T>
struct Foo
{
T bar;
};

template <typename T>
void foo(T val)
{
Foo<T> instance = { val * 5.0 };
}

int main()
{
foo(0.0f);
}

http://coliru.stacked-crooked.com/a/b159117097cc2461

它给了我以下警告/错误(取决于编译器/标志):

narrowing conversion of '(((double)val) * 5.0e+0)' from 'double' to 'float' inside { } [-Wnarrowing]
Foo<T> instance = { val * 5.0 };

通常如何避免?我是否应该将任何浮点文字包装在 T(0.0) 中,例如:

Foo<T> instance = { val * T(5.0) };

或者有什么更优雅的解决方案吗?

最佳答案

我认为 T(5.0) 是最优雅的解决方案。如果 T 是一个 double,那么编译器应该忽略转换,它与写入 5.0 相同。如果 T 是一个 float,那么转换应该在编译时解析为相当于写为 float 文字 5.0f

关于c++ - 如何避免在模板函数中使用浮点文字缩小转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46804205/

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