我刚刚在复杂数据结构的反序列化例程中发现了这个有趣的错误:
int32_t nrElements;
buffer->deserialize( &nrElements );
for( int16_t i=0; i<nrElements; ++i ) {
// deserialize element
}
如果nrElements
小于2 15 ,这很有效,否则会导致无限循环。是否有可以检测此类错误的静态分析工具?海湾合作委员会没有对此发出警告。
答案 0 :(得分:2)
我认为海湾合作委员会不支持对此发出警告。我想你可以使用模板函数和静态断言实现这一点:
template<typename T1, typename T2>
bool safeLess(T1 left, T2 right)
{
static_assert(std::is_same<T1, T2>::value);
return left < right;
}
但是,我真的怀疑它的有用性,因为它使代码混乱(并且可能妨碍了一些编译器优化)。