C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了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));

是否有任何干净的方法(不使用编译指示警告指令)来解决它?

解决方法

非常简单:使用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 – 如何解决警告C4333(‘>>’:右移太大,数据丢失)全部内容,希望文章能够帮你解决c – 如何解决警告C4333(‘>>’:右移太大,数据丢失)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。