2014-04-07 2 views
-1
void Player::removeWeapon(int location) 
{ 
    if (location<(int)weaponInCharacter.size()) { 
     weaponInCharacter.erase(weaponInCharacter.begin() + location); 
    } 
} 

Я уверен в следующей строке:Может кто-нибудь объяснить эту строку кода?

if (location<(int)weaponInCharacter.size()) { 

я могу видеть, что его сравнение ИНТ расположения на место в векторе weaponInCharacter, но то, что она делает между междунарами и вектором в этом часть кода: (int) weaponInCharacter.size())

+0

Это условие: если местоположение меньше размера вектора, отлитого от целого. – INait

+2

size() возвращает значение size_t. Внесите его во Int, чтобы избежать предупреждения компилятора. – Jepessen

+0

Не мог бы() вернуть int хотя? – user2294616

ответ

2

(int) - это просто старое литье C-стиля от int.

Это очень распространенная идиома. Возвращаемое значение size равно size_t, который не имеет знака. Когда вы попытаетесь сравнить это с подписанным int, многие компиляторы выдадут предупреждение. Чтобы устранить это предупреждение, вы можете просто нанести size_t на int, и все будет в порядке, если вы знаете, что значение, возвращаемое size, будет соответствовать int. Для возвращаемого значения было бы крайне редко, чтобы оно не соответствовало int.

+0

Я бы рекомендовал исправить API, чтобы вместо этого использовать 'size_t', вместо того чтобы сказать, что актер в порядке. Тогда код будет правильным. Предупреждения существуют по причине. – vanza

+1

@vanza, вы просто подталкиваете проблему к другому уровню в коде; в конечном итоге вы, вероятно, достигнете точки, где 'int' действительно является подходящим типом для использования. –

+0

Не уверен, что я могу согласиться с этим - всегда нужно использовать 'size_t' правильный тип. Но в любом случае это выходит за рамки вопроса (вроде). – vanza

Смежные вопросы