c – 如何解决警告C4333(‘>>’:右移太大,数据丢失)
发布时间:2020-12-16 09:32:23 所属栏目:百科 来源:网络整理
导读:我有以下函数将任意大小的整数转换为缓冲区: templatetypename Tstd::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
我有以下函数将任意大小的整数转换为缓冲区:
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可能具有不可打印的值) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |