Goz*_*Goz 5 c++ templates gcc-warning
我遇到了一个问题,我确信这个问题很容易解决,但我很茫然......
我有一个执行以下代码的模板:
T value = d;
if ( std::numeric_limits< T >::is_signed )
{
if ( value < 0 )
{
*this += _T( "-" );
value = -(signed)value;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,由于明显的原因,GCC正在给我一个警告(由于数据类型的范围有限,比较总是错误的当为无符号类型编译此代码时).我完全理解这背后的原因,我在numeric_limits检查中查看是否可以让编译器关闭它(它适用于MSVC).在海湾合作委员会下,我得到了警告.有没有办法(没有禁用警告,我甚至不知道你是否可以使用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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1609 次 |
| 最近记录: |