c – 如何解决警告C4333(‘>>’:右移太大,数据丢失)
作者:互联网
我有以下函数将任意大小的整数转换为缓冲区:
template<typename T>
std::string build_data_from(T val)
{
std::string result;
for (int i = 0; i < sizeof(val); i++)
{
result.insert(0, 1, char(val));
val = val >> 8;
}
return result;
};
但是,使用unsigned char调用模板函数会在Visual C 2008中呈现警告:
std::string x(build_data_from<unsigned char>(1));
warning C4333: ‘>>’ : right shift by
too large amount, data loss
是否有任何干净的方法(不使用编译指示警告指令)来解决它?
解决方法:
非常简单:使用unsigned char(和char)重载build_data_from.
这可以通过普通重载或使用std :: enable_if来完成,我建议一个简单的重载,因为它会更容易:
std::string build_data_from(char val)
{
std::string result; result += val; return result;
}
std::string build_data_from(unsigned char val)
{
return build_data_from(char(val));
}
但是,你有意识到将一个unsigned char转换为char可能会产生一些奇怪的输出吗? (我的意思是unsigned char可能具有不可打印的值)
标签:c,visual-c,visual-studio,compiler-warnings 来源: https://codeday.me/bug/20190730/1579805.html