当前位置:  开发笔记 > 编程语言 > 正文

从'xxxx'转换为'yyyy',可能会丢失数据,抑制?

如何解决《从'xxxx'转换为'yyyy',可能会丢失数据,抑制?》经验,为你挑选了1个好方法。

有时我会收到从较长类型转换为较小类型的警告,例如:

void f( unsigned short i ) // f - accept any numeric type
                           // smaller than std::vector<>::size_type
{}

std::vector < some_type > v;
..
f ( v.size() );

通常我使用下一个解决方案之一:

assert( v.size() <= std::numeric_limits< unsigned short >::max() );
f( static_cast< unsigned short >( v.size() ) );

要么

f( boost::numeric_cast<  unsigned short >( v.size() ) );

但是在我目前的工作中,没有使用过,并且从上个月开始断言是不允许的.

您知道什么其他安全的方法可以抑制此警告?
有没有陷入困境的陷阱?

PS: 并不总是可以改变f的签名,有时也应该接受小数字类型.

编辑: 我想让转换尽可能安全.



1> dirkgently..:

为什么要放在第一位?向量的大小通常是无符号整数.如果可能的话,我会说更新功能签名.警告并不意味着被压制,而是被解决.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有