gpt4 book ai didi

c++ - 修复 GCC 中的 "comparison is always false ..."警告

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

我遇到了一个我确定很容易解决的问题,但我不知所措......

我有一个执行以下代码的模板:

T value     = d;
if ( std::numeric_limits< T >::is_signed )
{
if ( value < 0 )
{
*this += _T( "-" );
value = -(signed)value;
}
}

现在,出于显而易见的原因,当此代码针对无符号类型编译时,GCC 会给我一个警告(由于数据类型的范围有限,比较总是错误的)。我完全理解这背后的原因,我进行了 numeric_limits 检查以查看是否可以让编译器关闭它(它适用于 MSVC)。唉,在 GCC 下,我得到了警告。有什么办法(除了禁用警告,我什至不知道你是否可以使用 GCC)来修复这个警告?代码永远不会被调用,我假设优化器也会编译它,但我无法摆脱警告。

谁能给我一个解决方案?

干杯!

最佳答案

更简单的解决方案:

template <typename T> inline bool isNegative(T value) {
return std::numeric_limits< T >::is_signed && value < 0; // Doesn't trigger warning.
}

T value = d;
if ( isNegative(value) ) // Doesn't trigger warning either.
{
*this += _T( "-" );
value = -1 * value;
}

关于c++ - 修复 GCC 中的 "comparison is always false ..."警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3140027/

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