numeric_limits<data_type>::is_signed 中的data_type 不同,numeric_limits<data_type>::is_signed 的值也不尽相同,下面是一个例子:
#include <iostream>
#include <limits>
using namespace std;
int main(int argc, char* argv[])
{
bool b = numeric_limits<int>::is_signed;
cout << b << endl;
b = numeric_limits<unsigned int>::is_signed;
cout << b << endl;
}
输出为:
1
0
项目中,做代码静态安全检测时,Coverity工具报告说,boost中有DEADCODE,原因是 numeric_limits<data_type>::is_signed 一定不为0。但上面的例子说明了,工具检测的结果未必正确。其实这里boost 代码中的 if(is_signed) 判断是完全有必要的,不存在 DEADCODE。