有没有办法防范this question中代码生成的二进制文件?理想情况下,在编译时通过错误。来自问题的示例代码:
unsigned int nVal = 0;
nVal = -5; // no error!
答案 0 :(得分:10)
如果您使用的是g ++,那么交换机-Wsign-conversion
会发出关于转换的警告,而-Werror
会使该警告出错。
答案 1 :(得分:4)
编辑:除了@thiton的回答。
通过简单的分配,这是不可能的。但是,如果您以一个小的特殊包装方式分配值,那么它可以提供帮助。即。
nVal = -5;
应替换为,
Assign<-5>(nVal);
Assign()
在哪里,
template<int VAL>
void Assign (unsigned int &nVal)
{
typedef int arr[(VAL >= 0) 1 : -1];
nVal = VAL;
}