C++ 有人能解释一下这行代码吗? void Player::移除武器(int位置) { if(location

C++ 有人能解释一下这行代码吗? 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

The
(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()) {