如果我在声明一个新数组时使用int作为数组大小lint抱怨。解决此问题的正确方法是什么:
我可以静态地将int转换为unsigned,但这看起来有点奇怪......
在不改变数组使用和整数大小的情况下解决这个问题的最佳方法是什么?
MapItemPtr* pMapItems = new MapItemPtr[ (unsigned int)iRecordCount ];
可以这样做:
MapItemPtr* pMapItems = new MapItemPtr[static_cast<unsigned int>( iRecordCount )];
这是解决lint错误的正确方法吗? 第3811行错误737:从int到unsigned int的升级符号丢失
还是有更优雅的方式?
答案 0 :(得分:6)
由于iRecordCount
显然是为了保存非负整数,为什么不首先将其声明为unsigned int
?
答案 1 :(得分:2)
错误不是变量的常量,正如lint所说:
: Line 3811 Error 737: Loss of sign in promotion from int to unsigned int.
您有几个选择:
1 - static_cast<>
int
至unsigned int
,
2 - (unsigned int*)
c-style强制转换,但在c ++代码中应避免使用
3 - 创建一个临时unsigned int
变量,为您创建矢量。
因为您只是创建一个数组,所以变量的类型可以是size_t
,在cstddef
中声明。