【发布时间】:2017-10-05 20:49:37
【问题描述】:
目前我的代码中有一个函数可以将数字类型转换为字符串。由于我没有使用std::to_string 的原因。现在这段代码在 XCode 上构建得很好,但窗口似乎在抱怨。 windows 抱怨的原因是因为有一次我传递了一个无符号类型,然后对它做负数仍然保持正数,因为该类型是无符号的。我的问题是我可以放一个 if 类来检查类型是否已签名然后输入条件吗?这样能解决问题吗
template<typename t>
std::string MyFunct(t num,int base=10)
{
char str [sizeof(t)*8+1];
int i = 0;
bool isNegative = false;
if (num == 0)
{
str[i++] = '0';
str[i] = '\0';
return str;
}
//Negative only when base is 10
if (num < 0 && base == 10)
{
isNegative = true;
num = -num; //<------ERROR in case the type is unsigned
}
....
....
}
我该如何解决这个问题?有没有办法让我告诉编译器只有当类型是无符号的时候才进入这里?
【问题讨论】:
-
好吧,你可以试试
num = num * (1 - 2 * std::is_unsigned<T>::value)。但是,不知道它是否能达到您想要的效果。 -
@JohnB 如果
std::is_unsigned<T>::value未签名,它会输出什么? -
true,我猜。可能num = num * (1 - (std::is_unsigned<T>::value ? 2 : 0) )是正确的方法。 -
你不能简单地写
num = (T) (-1) * num;吗? -
请禁用这个愚蠢的警告并签署请愿书,让微软永久删除它。