gpt4 book ai didi

c++ - 减少 C++ 中的转换困惑

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:09 25 4
gpt4 key购买 nike

在对泛型类进行编程时,我最终得到的方法充满了强制转换(否则我会收到警告,这些警告在我们的项目中被视为错误):

template <typename floatType>
class foo
{
public:
typedef floatType real_type;

real_type bar()
{
real_type a = (real_type)0.5; // should I be using static_cast? Either way, the code becomes cluttered quickly
real_type b = a + 0.6; // warning here for floatType = float

real_type someLongEquation = a + ((real_type)0.5 * (real_type)100) + (real_type)17.0;

return a + b + someLongEquation;
}
};

int main()
{
{
foo<float> z;
z.bar();
}

{
foo<double> z;
z.bar();
}

return 0;
}

有什么办法可以减少这种困惑吗?

请注意,我意识到我在 someLongEquation 中使用了魔法常量。即使我将它们分开,也会增加困惑。无论哪种方式,这都不是问题的重点:)

最佳答案

一个简单的方法是关闭代码周围的警告。使用 MSVC:

#pragma warning(push) // save warnings state
#pragma warning(disable:4244) // narrowing conversion
// code here ...
#pragma warning(pop) // restore warnings

但是,如果您的魔术常量不需要 double 的扩展精度,则更好的方法是只使用 float 文字。只需将 f 附加到您的浮点文字即可。此外,100 不需要转换。如果您确实需要精确度,那么请回过头来禁用警告。

关于c++ - 减少 C++ 中的转换困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9526076/

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