有时我会收到从较长类型转换为较小类型的警告,例如:
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 的签名,有时也确实应该接受小的数字类型。
编辑: 我想让转换尽可能安全。