如果尝试将负数分配给未签名的容器,是否存在导致编译错误的方法?

时间:2011-09-20 11:37:53

标签: c++ compiler-errors g++

有没有办法防范this question中代码生成的二进制文件?理想情况下,在编译时通过错误。来自问题的示例代码:

unsigned int nVal = 0;
nVal = -5;  // no error!

2 个答案:

答案 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;
}

Demo