C++ 有人能解释一下这行代码吗? void Player::移除武器(int位置) { if(location
TheC++ 有人能解释一下这行代码吗? void Player::移除武器(int位置) { if(location,c++,vector,int,C++,Vector,Int,The(int)只是将值转换为int的旧C样式 这是一个非常常见的习惯用法。size的返回值是size\u t,它是无符号的。当您尝试将其与有符号的int进行比较时,许多编译器都会发出警告。要消除警告,只需将size\u t强制转换为int,只要您知道由size返回的值将适合int。返回值不适合int的情况非常罕见。这是一个条件:如果位置小于矢量大小,则强制转换为整数。size()返回一个size\t值。将其强制转换为int可避免编译器警告。Wouldnt size()虽然返回int?@Jepe
(int)
只是将值转换为int
的旧C样式
这是一个非常常见的习惯用法。
size
的返回值是size\u t
,它是无符号的。当您尝试将其与有符号的int
进行比较时,许多编译器都会发出警告。要消除警告,只需将size\u t
强制转换为int
,只要您知道由size
返回的值将适合int
。返回值不适合int的情况非常罕见。这是一个条件:如果位置小于矢量大小,则强制转换为整数。size()返回一个size\t值。将其强制转换为int可避免编译器警告。Wouldnt size()虽然返回int?@Jepessen:但也可能掩盖整数溢出问题…@user2294616:No,size()
在标准容器中返回size\u t
,这是一种典型的无符号整数类型。如果将size\u t
与int
进行比较,您通常会收到一条编译警告,提示您如何将有符号类型与无符号类型进行比较。我建议修复API,改为使用size\u t
,而不是使用cast是可以的。那么代码就正确了。警告的存在是有原因的。@vanza你只是把问题推到了代码的另一个层次;最终你可能会达到一个点,int
确实是正确的使用类型。我不确定我是否同意-size\u t
始终是正确的使用类型。但是无论如何这超出了问题的范围(有点)。@vanza将无符号类型推到程序中超出必要的位置是一个糟糕的解决方案,因为无符号类型由于其“悬崖”而具有固有的危险性零附近的行为。如果担心溢出,可以添加一个包装器接口,该接口以int
的形式获取对象的大小,并检查该值是否合适(并引发异常或其他情况)。如果武器字符的大小接近INT\u MAX
,这可能意味着一个更深层次的问题,比如腐败;在另一个size\u t
中正确地包含该值并不是解决办法。@Kaz仍然不相信。对于大于INT\u MAX的东西来说,这是完全有效的。使用INT,你就是choosing可以处理你所说的“悬崖”上的溢出(这是我在实际程序中从未遇到过的,与溢出不同)。大文件、映射内存、很多东西都可以很容易地溢出int。
void Player::removeWeapon(int location)
{
if (location<(int)weaponInCharacter.size()) {
weaponInCharacter.erase(weaponInCharacter.begin() + location);
}
}
if (location<(int)weaponInCharacter.size()) {